2017-06-01 2 views
0

J'ai une matrice avec les dimensions ci-dessous, la matrice contient des distances calculées entre un ensemble de variantes génétiques, je voudrais créer une nouvelle matrice ou modifier la matrice PosDiff pour les distances qui sont inférieures à ou égal à 500 000.Suppression des éléments de la matrice sous une certaine valeur

dim(PosDiff) 
[1] 597 41099 

j'ai essayé subset(), setdiff() et obtenir des résultats déglingués comme une matrice avec une colonne et un 41099 observations

Merci

+0

pouvez-vous poster un exemple de la sortie désirée? –

+1

Bienvenue dans StackOverflow. S'il vous plaît nous donner plus d'informations lorsque vous postez une question afin que nous puissions reproduire le problème. Qu'en est-il d'essayer 'PosDiff [which (PosDiff <= 500000)]'? –

Répondre

0

Ok nous allons avoir un aller

# Generate a random matrix with 4 rows and 3 cols 
> m <- matrix(runif(12), nrow=4) 
> m 
#   [,1]  [,2]  [,3] 
#[1,] 0.62361346 0.7793682 0.9447203 
#[2,] 0.14844661 0.7335280 0.2936238 
#[3,] 0.08026447 0.8172304 0.1490721 
#[4,] 0.46406955 0.1701625 0.7193786 

# Then keep all the elements <= 0.5 setting all the rest to NA 
> m1 <- apply(m, FUN=function(x){ifelse(x<=0.5, NA, x)}, MARGIN = c(1,2)) 
> m1 
#   [,1]  [,2]  [,3] 
#[1,]   NA  NA  NA 
#[2,] 0.14844661  NA 0.2936238 
#[3,] 0.08026447  NA 0.1490721 
#[4,] 0.46406955 0.1701625  NA 

Si vous voulez juste que les valeurs inférieures à 0.5 alors vous pouvez exécuter m[which(m<=0.5)]

0

Peut-être vous avez juste besoin:

ifelse(PosDiff <= 500000., PosDiff, NA)

ou:

ifelse(PosDiff <= 500000., PosDiff, 0)

dépendamment si vous voulez avoir une valeur manquante ou 0 au lieu d'éléments qui sont supérieurs à 500000