![](/img/trans.png)
[英]R - row count across columns using specific starting column based on value in another column
[英]How to count by row across specific columns in R?
我有一个类似以下的数据框,其中每一行是一个人,每一列是一个编码为0,1的答案:
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)))
我想做的是为每个人计算仅某些列中的“ 1”数,并按列名而不是数字引用这些列。 在这种情况下,“仅计数1在“ answer1”和“ answer3”中出现的次数”。 因此,我想得出的最终结果是:
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,并且可以使用它对所有列进行求和,但是似乎无法让它仅选择某些列。 我敢肯定对此有一个很简单的答案,但是这使我难以理解...谢谢!
编辑:我需要实际计算“ 1”的实例数量,而不是简单地在两列之间求和,因为实际数据帧中的某些行将包含非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)))
根据您的编辑,尝试:
> 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
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.