dplyr mutate ifelse返回组的第一个值而不是按行
我正在尝试使用ifelse对data.frame进行变异:dplyr mutate ifelse返回组的第一个值而不是按行,r,dplyr,R,Dplyr,我正在尝试使用ifelse对data.frame进行变异: df = data.frame(grp = c('a', 'a', 'a', 'b', 'b', 'b'), value1 = c(0, 0, 0, 0, 1, 2), value2 = 1:6) df %>% group_by(grp) %>% mutate(value2 = ifelse(all(value1 == 0), 0, value
df = data.frame(grp = c('a', 'a', 'a', 'b', 'b', 'b'),
value1 = c(0, 0, 0, 0, 1, 2),
value2 = 1:6)
df %>%
group_by(grp) %>%
mutate(value2 = ifelse(all(value1 == 0), 0, value2))
返回
# # A tibble: 6 x 3
# # Groups: grp [2]
# grp value1 value2
# <chr> <dbl> <dbl>
# 1 a 0 0
# 2 a 0 0
# 3 a 0 0
# 4 b 0 4
# 5 b 1 4
# 6 b 2 4
##一个tible:6x3
##分组:grp[2]
#grp值1值2
#
#1 a 0 0
#2 a 0 0
#3 a 0 0
#4B04
#5b14
#6 b 2 4
而不是
# # A tibble: 6 x 3
# # Groups: grp [2]
# grp value1 value2
# <chr> <dbl> <dbl>
# 1 a 0 0
# 2 a 0 0
# 3 a 0 0
# 4 b 0 4
# 5 b 1 5
# 6 b 2 6
##一个tible:6x3
##分组:grp[2]
#grp值1值2
#
#1 a 0 0
#2 a 0 0
#3 a 0 0
#4B04
#5b15
#6B26
如果条件为false,如何更改
mutate
,使“value2”的行保持不变?您可以使用if
和else
而不是ifelse()
:
df%>%
分组依据(grp)%>%
变异(value2=if(all(value1==0))0其他值2)
grp值1值2
1 a 0 0
2 a 0 0
3 a 0 0
4B04
5b15
6B26
您可以尝试使用ifelse
作为掩码,例如
df %>%
group_by(grp) %>%
mutate(value2 = ifelse(all(value1 == 0), 0, 1)*value2)
或者(感谢@tmfmnk的评论)
给
grp value1 value2
<chr> <dbl> <dbl>
1 a 0 0
2 a 0 0
3 a 0 0
4 b 0 4
5 b 1 5
6 b 2 6
很酷,我不知道它们可以在mutate内部那样使用。在这种情况下,
df%>%groupby(grp)%%>%mutate(value2=any(value1!=0)*value2)
会更合理,不是吗?@tmfmnk是的,更合理。
df %>%
group_by(grp) %>%
mutate(value2 = any(value1 != 0)*value2)
grp value1 value2
<chr> <dbl> <dbl>
1 a 0 0
2 a 0 0
3 a 0 0
4 b 0 4
5 b 1 5
6 b 2 6
df %>%
group_by(grp) %>%
mutate(value2 = ifelse(rep(all(value1 == 0),n()), 0, value2))