R:通过固定许多列的值从 data.frame 进行子集化
R: subsetting from data.frame by fixing value of many columns
我有一个包含 24 列零和一的数据框。我想将前 12 列中与第一行具有相同值的那些行子集化。如果不显式输入十二个条件,我该怎么做?
我只能想到类似
subs<-huge[huge[,1:12]==huge[1,1:12],]
但这不起作用。
Error in Ops.data.frame(huge[, 1:12], huge[1, 1:12]) :
‘==’ only defined for equally-sized data frames
如错误所述,比较的数据集大小不均。
我们可以通过将第一行(即1:12)的每个元素复制huge[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]
我有一个包含 24 列零和一的数据框。我想将前 12 列中与第一行具有相同值的那些行子集化。如果不显式输入十二个条件,我该怎么做?
我只能想到类似
subs<-huge[huge[,1:12]==huge[1,1:12],]
但这不起作用。
Error in Ops.data.frame(huge[, 1:12], huge[1, 1:12]) : ‘==’ only defined for equally-sized data frames
如错误所述,比较的数据集大小不均。
我们可以通过将第一行(即1:12)的每个元素复制huge[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]