Domanda

Ho un dataset di grandi dimensioni (202k punti).So che ci sono 8 valori superiori a 0,5.Voglio sottoinsieme di tali righe.

Come faccio a trovare/restituito un elenco con i numeri di riga in cui i valori sono > 0.5?

È stato utile?

Soluzione

Se il set di dati è un vettore di nome x:

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

Se il set di dati è un data.frame o matrice di nome x e la variabile di interesse è nella colonna j:

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

Ma se si vuole solo trovare il sottoinsieme e non si ha realmente bisogno i numeri di riga, utilizzare

subset(x, x > 0.5)

per un vettore e

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

per una matrice o data.frame.

Altri suggerimenti

which(x > 0.5)

Ecco alcuni dati fittizi:

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)

che si presenta come:

> 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

Ed ecco l'indice di riga logica,

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

Si può usare per estrarre i file che si desidera:

PeakRows <- D[index,]

che assomiglia a questo:

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

Usando l'argomento arr.ind=TRUE con which è un ottimo modo per trovare la riga (o colonna) di numeri in cui la condizione TRUE,

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 con arr.ind=TRUE restituisce gli indici di un array, in cui la condizione è TRUE

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

così il sottoinsieme diventa

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top