dplyr:group_by和哪个

dplyr:group_by和哪个,r,dplyr,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)

如果“标志”小于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()
df%
分组依据(用户id)%>%

mutate(variable1=sum(.$value[其中(.$flag您不需要
$

 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
这里有一个例子,我们通过使用
和不使用
得到不同的结果

 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

抱歉,df2%>%是一个错误,我刚刚编辑了为什么不需要

 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
 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