Come faccio a trovare i valori di picco/numeri di riga?
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?
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