如何在R中的特定列中按行计数?

时间:2014-04-29 13:27:38

标签: r

我有一个如下所示的数据框,其中每一行都是一个人,每列都是一个代码为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)))

1 个答案:

答案 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
})