2017-06-01 6 views
0

Ich habe eine Matrix mit Dimensionen unten, die Matrix enthält berechnete Abstände zwischen einer Reihe von genetischen Varianten, möchte ich eine neue Matrix erstellen oder die PosDiff-Matrix nur auf Entfernungen, die kleiner als sind oder gleich 500.000.Entfernen von Matrixelementen unter einem bestimmten Wert

dim(PosDiff) 
[1] 597 41099 

ich habe subset() versucht, setdiff() und wackelig Ergebnisse erzielen wie eine Matrix mit 1 Säule und einer 41.099 Beobachtungen

Dank

+0

können Sie ein Beispiel für die gewünschte Ausgabe veröffentlichen? –

+1

Willkommen bei StackOverflow. Bitte geben Sie uns weitere Informationen, wenn Sie eine Frage stellen, damit wir das Problem reproduzieren können. Was ist mit versuchen 'PosDiff [welche (PosDiff <= 500000)]'? –

Antwort

0

Ok sie ein

# 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 

gehen Wenn Sie möchten nur die Werte kleiner als 0.5 dann können Sie m[which(m<=0.5)]

ausführen
0

Vielleicht brauchen Sie nur:

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

oder:

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

abhängig, ob Sie fehlenden Wert oder 0 statt Elemente haben wollen, die größer als 500000.

sind
Verwandte Themen