![](/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.