我有一个包含24列零和一列的数据帧。我想将前12列中具有相同值的行作为第一行进行子集化。如果不明确键入十二个条件,我怎么能这样做?
我只能想到像
这样的东西subs<-huge[huge[,1:12]==huge[1,1:12],]
但那不起作用。
Ops.data.frame中的错误(巨大的[,1:12],巨大的[1,1:12]): '=='仅针对大小相同的数据框定义
答案 0 :(得分:3)
正如错误所述,比较的数据集大小不同。
我们可以通过将huge[1:12]
的列数复制到第一行(即1:12)的每个元素来使其相等。在这里,我使用col(huge[1:12])]
来完成这项任务。我们也可以使用?rep
。在复制步骤之后,我们可以获得非匹配元素(!=
)的逻辑索引,得到行的总和(rowSums
)。值“0”将匹配所有元素。否定(!rowSums
)将'0'值转换为'TRUE'并对数据集进行子集化。
huge[!rowSums(huge[1:12]!= huge[1,1:12][col(huge[1:12])]),]
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
#1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1
#15 0 0 0 1 0 1 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1
#39 0 0 0 1 0 1 1 1 0 0 0 0 1 0 1 0 0 1 0 0 1
# V22 V23 V24
#1 1 1 1
#15 1 0 1
#39 0 1 0
set.seed(353)
huge <- as.data.frame(matrix(sample(0:1, 24*60, replace=TRUE), ncol=24))
huge[c(15,39),1:12] <- huge[1, 1:12]