[英]In R, conditionally subset only those columns where the sum of specific rows is X
背景
我有一個 dataframe df
:
df <- data.frame(task = c("a","b","c", "d","e"),
rater_1 = c(1,0,1,0,0),
rater_2 = c(1,0,1,1,1),
rater_3 = c(1,0,0,0,0),
stringsAsFactors=FALSE)
> df
task rater_1 rater_2 rater_3
1 a 1 1 1
2 b 0 0 0
3 c 1 1 0
4 d 0 1 0
5 e 0 1 0
評分者被賦予關於產品質量的評分任務——如果他們評分的東西質量好,它得到1
; 如果不是,它會得到一個0
。
問題
我希望能夠僅對rater_1
、 rater_2
和rater_3
的列總和等於特定數字的那些行進行子集化。 換句話說,我只想返回n 個評分者(共 3 個)在評分任務中標記為“1”的那些行。
一個具體的例子:如果我正在尋找評級總和為2的任何行,我會得到一個像這樣的小子集 dataframe :
task rater_1 rater_2 rater_3
c 1 1 0
我試過的
我在dplyr
中擺弄filter
:
df %>%
filter(sum(rater_1, rater_2, rater_3) == 2)
[1] task rater_1 rater_2 rater_3
<0 rows> (or 0-length row.names)
但它沒有給我我想要的。
您可以使用rowSums
獲取每行的總和,然后基於它進行過濾。 由於您需要除第一列之外的所有列的總和,因此我們將其相應地應用於數據框:
df[rowSums(df[-1])==2,]
# task rater_1 rater_2 rater_3
#3 c 1 1 0
如果我們使用df[,2:4]
而不是df[-1]
,則等效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.