1

我有一个大数据集(202k 点)。我知道有 8 个超过 0.5 的值。我想对这些行进行子集化。

如何查找/返回值大于 0.5 的行号列表?

4

4 回答 4

5

如果数据集是一个名为 的向量x

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

如果数据集是命名的 data.frame 或矩阵x,并且感兴趣的变量在 column 中j

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

但是,如果您只想找到子集并且不需要行号,请使用

subset(x, x > 0.5)

对于一个向量和

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

对于矩阵或data.frame。

于 2009-10-16T05:33:21.950 回答
2

which(x > 0.5)

于 2009-10-16T15:45:47.363 回答
0

这是一些虚拟数据:

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)

看起来像:

> 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

这是逻辑行索引,

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

您可以使用它来提取所需的行:

PeakRows <- D[index,]

看起来像这样:

> PeakRows
     [,1] [,2] [,3] [,4]
[1,]  0.6  0.2 0.23  0.2
[2,]  0.1  0.1 0.80  0.2
于 2009-10-16T05:42:45.760 回答
0

使用参数arr.ind=TRUEwithwhich是查找条件为 的行(或列)号的好方法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

whichwitharr.ind=TRUE返回条件所在的数组索引TRUE

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

所以子集变成

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
于 2015-08-20T02:23:18.993 回答