Frage

Ich habe eine große Datenmenge (202k Punkte). Ich weiß, dass es 8 Werte über 0,5. Ich möchte auf die Zeilen der Teilmenge.

Wie finde ich / eine Liste, die Zeilennummern, bei denen die Werte> 0.5?

War es hilfreich?

Lösung

Wenn der Datensatz ist ein Vektor namens x:

(1:length(x))[x > 0.5]

Wenn der Datensatz ein data.frame oder Matrix genannt x und die Variablen von Interesse ist in Spalte j:

(1:nrow(x))[x[,j] > 0.5]

Aber wenn Sie wollen einfach nur die Teilmenge zu finden und nicht wirklich brauchen, die Zeilennummern, die Verwendung

subset(x, x > 0.5)

für einen Vektor und

subset(x, x[,j] > 0.5)

für eine Matrix oder data.frame.

Andere Tipps

which(x > 0.5)

Hier einige Dummy-Daten:

D<-matrix(c(0.6,0.1,0.1,0.2,0.1,0.1,0.23,0.1,0.8,0.2,0.2,0.2),nrow=3)

Welche aussieht wie:

> D
     [,1] [,2] [,3] [,4]
[1,]  0.6  0.2 0.23  0.2
[2,]  0.1  0.1 0.10  0.2
[3,]  0.1  0.1 0.80  0.2

Und hier ist der logische Zeilenindex,

index <- (rowSums(D>0.5))>=1

Sie können es verwenden, um die Zeilen zu extrahieren Sie wollen:

PeakRows <- D[index,]

Welche sieht wie folgt aus:

> PeakRows
     [,1] [,2] [,3] [,4]
[1,]  0.6  0.2 0.23  0.2
[2,]  0.1  0.1 0.80  0.2

mit arr.ind=TRUE das Argument which ist eine großartige Möglichkeit, die Zeile für die Suche nach (oder Spalte) Zahlen, bei denen eine Bedingung TRUE ist,

df <- matrix(c(0.6,0.2,0.1,0.25,0.11,0.13,0.23,0.18,0.21,0.29,0.23,0.51), nrow=4)

#      [,1] [,2] [,3]
# [1,] 0.60 0.11 0.21
# [2,] 0.20 0.13 0.29
# [3,] 0.10 0.23 0.23
# [4,] 0.25 0.18 0.51

which mit arr.ind=TRUE gibt den Array-Indizes, wo die Bedingung TRUE

which(df > 0.5, arr.ind=TRUE)
     row col
[1,]   1   1
[2,]   4   3

, so dass die Teilmenge wird

df[-which(df > 0.5, arr.ind=TRUE)[, "row"], ]

#      [,1] [,2] [,3]
# [1,]  0.2 0.13 0.29
# [2,]  0.1 0.23 0.23
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top