我有一个如下所示的数据框,其中每一行都是一个人,每列都是一个代码为0的答案:
data<-as.data.frame(cbind('answer1' = c(0,0,1,0,0,0),
'answer2' = c(1,1,1,1,1,0),
'answer3' = c(1,1,1,0,1,1),
'answer4' = c(1,0,0,0,0,0)))
我想要做的是为每个人计算仅某些列中的&#34; 1&#34;以及按列名引用这些列,而不是数字。在这种情况下,&#34;计算1中出现的次数&#34; answer1&#34;和&#34;回答3&#34;仅&#34。所以我希望得到一些看起来像的东西:
data<-as.data.frame(cbind('answer1' = c(0,0,1,0,0,0),
'answer2' = c(1,1,1,1,1,0),
'answer3' = c(1,1,1,0,1,1),
'answer4' = c(1,0,0,0,0,0),
'sum' = c(1,1,2,0,1,1)))
我已经搜索并找到了许多相关问题,但没有解决仅计算某些列并按名称引用这些列的具体问题。我已尝试过rowSums并可以使用它来汇总所有列,但似乎无法选择某些列。我确定这是一个非常简单的答案,但是我不知道了......谢谢!
编辑:我需要实际计算&#34; 1&#34;的实例数量。而不是简单地对两列进行求和,因为实际数据帧中的某些行将包含除1或0以外的值,这将干扰使用简单求和。因此,示例数据框应该是这样的:
data<-as.data.frame(cbind('answer1' = c(0,0,1,0,2,0),
'answer2' = c(1,1,1,1,1,0),
'answer3' = c(1,1,1,0,1,1),
'answer4' = c(1,0,0,0,0,0)))
答案 0 :(得分:1)
根据您的修改,尝试:
> rowSums(data[c("answer1", "answer3")] == 1)
[1] 1 1 2 0 1 1
是的,rowSums
是你想要的:
> data$sum <- rowSums(data[c("answer1", "answer3")])
> data
answer1 answer2 answer3 answer4 sum
1 0 1 1 1 1
2 0 1 1 0 1
3 1 1 1 0 2
4 0 1 0 0 0
5 0 1 1 0 1
6 0 0 1 0 1
然而,还有许多其他方法。对于这些类型的问题,within
(或transform
)有时很好:
within(data, {
sum <- answer1 + answer3
})