2016-07-21 17 views
0

Ich möchte jede Zeile entfernen, die eine Nummer über 6 und unter -6 hat. Mit anderen Worten, wenn eine Zeile mindestens eine Zahl hat, die nicht zwischen -6 und 6 liegt, möchte ich diese Zeile entfernen.Entfernen Sie alle Zeilen basierend auf einem Schwellenwert in R

Als reproduzierbares Beispiel betrachten:

set.seed(0); mat <- matrix(sample(-7:7,24,replace=TRUE), ncol = 4) 
mat 
#  [,1] [,2] [,3] [,4] 
#[1,] 6 6 -5 7 
#[2,] -4 7 3 -2 
#[3,] -2 2 -2 4 
#[4,] 1 2 4 7 
#[5,] 6 -7 0 -4 
#[6,] -4 -4 3 2 

Ich mag

#  [,1] [,2] [,3] [,4] 
#[1,] -2 2 -2 4 
#[2,] -4 -4 3 2 

Vielen Dank im Voraus.

Antwort

2

Wenn Sie Matrix mat ist, können Sie die Zeilen-ID erhalten, die Ihre Anforderung über eine der beiden gerecht werden:

id <- which(apply(mat, 1, function (x) all(abs(x) <= 6))) 
id <- which(rowSums(abs(mat) > 6) < 1) 

Jetzt extrahieren Sie/behalten die Zeilen eine neue Matrix zu erhalten:

new_mat <- mat[id, ] 

Beispiel

set.seed(0); mat <- matrix(sample(-7:7,24,replace=TRUE), ncol = 4) 
mat 
#  [,1] [,2] [,3] [,4] 
#[1,] 6 6 -5 7 
#[2,] -4 7 3 -2 
#[3,] -2 2 -2 4 
#[4,] 1 2 4 7 
#[5,] 6 -7 0 -4 
#[6,] -4 -4 3 2 

Meine Code gibt:

new_mat 
#  [,1] [,2] [,3] [,4] 
#[1,] -2 2 -2 4 
#[2,] -4 -4 3 2 
+0

Ja, Sie haben Recht. Boy wäre ein reproduzierbares Beispiel sicher hier praktisch! –

+0

Es hat funktioniert!, Danke! – Cris

Verwandte Themen