簡體   English   中英

如何在R中的特定列上按行計數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM