题
我有一个大的数据集(202K点)。我知道,有超过0.5 8个值。我想到子集上的那些行。
如何找到/返回一个列表中的行数,其中值> 0.5
解决方案
如果数据集是一个矢量命名x
:
(1:length(x))[x > 0.5]
如果数据集为data.frame或矩阵命名x
和感兴趣的变量是在柱j
:
(1:nrow(x))[x[,j] > 0.5]
但如果你只是想找到的子集,并不真正需要的行号,使用
subset(x, x > 0.5)
有一个矢量和
subset(x, x[,j] > 0.5)
为矩阵或data.frame。
其他提示
which(x > 0.5)
下面是一些伪数据:
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
使用参数arr.ind=TRUE
与which
是用于寻找行(或列)数,其中一个条件是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
与arr.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
不隶属于 StackOverflow