1

嗨,我有一些从 csv 读取的数据,这些数据以二进制形式列出:

   1 2 3 4...N
1  0 1 0 1...1
2  1 1 0 1...1
3  0 0 0 0...0
4  1 0 1 1...1
.  1 1 1 0...1
.  1 0 0 0...1
N  0 0 1 1...0

str(数据)的屏幕截图

我想获取这些数据的一个子集,其中行向量的总和大于一个数字,比如 10 或 x。第一列是客户 ID 的占位符列,因此需要排除。你对我如何去做这件事有什么建议吗?

我一直在尝试各种各样的事情,df=subset()但我无法让语法正确。

提前致谢。

4

1 回答 1

1

我们可以做到这一点rowSums

df1[rowSums(df1) > 10, , drop = FALSE]
#  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
#7  0  0  0  1  0  0  1  1  0   1   1   1   1   1   0   0   0   1   1   1
#9  1  1  1  1  0  0  1  0  0   0   0   1   1   0   0   1   1   1   0   1

更新

在 OP 的数据集中,第一列“X”不是二进制的并且具有更大的数字。因此,当我们包含该变量时,rowSums将大于 10。它是索引 ID,不用于计算。因此,通过在 中删除它rowSums,它将很好地进行子集化

df1[rowSums(df1[-1])> 10,]

数据

set.seed(24)
df1 <- as.data.frame(matrix(sample(0:1, 10* 20, replace = TRUE), ncol = 20))
于 2018-04-03T14:39:53.383 回答