r - dplyr: group_by 和 which

标签 r dplyr

如果“标志”低于 5,我想为数据集的每个用户恢复“值”的总和。

我可以使用 ifelse 而不是 which 但我不明白为什么这段代码不起作用:

df <- data.frame(
  user_id = c(1, 1, 1, 2, 2, 2),
     flag = c(2,5, 3, 1, 2, 7),
    value = c(20, 10, 4, 3, 2, 2) 
)
df

library(dplyr)
 df2 =
   df %>%
   group_by(user_id) %>%
   mutate(variable1 = sum(.$value[which(.$flag<5)]),
          variable2 = sum(.$value[which(.$flag<10)])) %>%
   ungroup()

Error in .$c(20, 10, 4) : invalid subscript type 'double'

最佳答案

您不需要.$

 df %>%
    group_by(user_id) %>% 
    mutate(variable1= sum(value[flag<5]), variable2 = sum(value[flag<10]))
#    user_id flag value variable1 variable2
#1       1    2    20        24        34
#2       1    5    10        24        34
#3       1    3     4        24        34
#4       2    1     3         5         7
#5       2    2     2         5         7
#6       2    7     2         5         7

如果有多个变量,可以使用mutate_each

df$value2 <- c(22,12,7,5,2,1)

df %>%
   group_by(user_id) %>% 
   mutate_each(funs(variable1=sum(.[flag<5]), variable2=sum(.[flag<10])),
         starts_with('value')) 

这是一种情况,我们通过使用 which 或不使用它得到不同的结果。

 df$flag[1:3] <- NA
 df %>% 
    group_by(user_id) %>%
    mutate(variable1 = sum(value[which(flag <5)]))
 #  user_id flag value variable1
 #1       1   NA    20         0
 #2       1   NA    10         0
 #3       1   NA     4         0
 #4       2    1     3         5
 #5       2    2     2         5
 #6       2    7     2         5

没有which

 df %>%
     group_by(user_id) %>%
     mutate(variable1 = sum(value[flag <5]))
 #  user_id flag value variable1
 #1       1   NA    20        NA
 #2       1   NA    10        NA
 #3       1   NA     4        NA
 #4       2    1     3         5
 #5       2    2     2         5
 #6       2    7     2         5

关于r - dplyr: group_by 和 which,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091838/

相关文章:

rownames_to_column 在 rowwise() 正确后不起作用

r - 在 R 中的 groupby 之后连接唯一的字符串

r - 如何在R中获得回归输出,忽略数据中的一个因素水平?

R tm 包 : utf-8 text

R - 帮助将因子转换为日期 (%m/%d/%Y %H :%M)

R boxplot : How to customize the appearance of the box-and-whisker plots (e. g.,删除线条或边框,更改异常值的符号)

r - ggplot geom_bar() 填充绘图上的不着色条

r - 从保存为 r 中列表列的模型中提取模型信息

regex - 使用正则表达式过滤 dplyr sqlite3 连接

r - 自定义排序 `by=`