2009-10-16 6 views
1

J'ai un grand ensemble de données (202k points). Je sais qu'il y a 8 valeurs sur 0.5. Je veux sous-ensemble sur ces lignes. Comment puis-je trouver/retourner une liste les numéros de lignes où les valeurs sont> 0,5?Comment trouver les valeurs de crête/numéro de ligne?

+2

Vous avez pris la balise R off. Dans quelle langue travaillez-vous? La question ne peut pas être répondue sans une certaine indication de l'environnement. –

Répondre

5

Si l'ensemble de données est un vecteur nommé x:

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

Si l'ensemble de données est une data.frame ou d'une matrice nommée x et la variable d'intérêt est dans la colonne j:

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

Mais si vous voulez juste trouver le sous-ensemble et ne pas vraiment besoin des numéros de ligne, utilisez

subset(x, x > 0.5) 

pour un vecteur et

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

pour une matrice ou data.frame.

+1

Merci tonnes! ça a fait l'affaire. J'ai fini par comprendre moi-même avant de découvrir que ce commentaire a été posté, mais c'est exactement ce que j'ai fait. –

0

Voici quelques données factices:

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) 

qui ressemble à:

> 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 

Et voici l'index logique de ligne,

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

Vous pouvez l'utiliser pour extraire les lignes que vous vouloir:

PeakRows <- D[index,] 

Ce qui ressemble à ceci:

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

which(x > 0.5)

0

En utilisant l'argument arr.ind=TRUE avec which est un excellent moyen pour trouver les numéros de ligne (ou colonne) où une condition est 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 avec arr.ind=TRUE renvoie les indices de tableau où la condition est TRUE

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

de sorte que le sous-ensemble devient

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 
Questions connexes