簡體   English   中英

在 R 中,有條件地僅對特定行的總和為 X 的列進行子集化

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

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