【发布时间】:2016-07-09 17:24:16
【问题描述】:
一般性问题:
有没有办法使用 dplyr 来识别感兴趣的组并仅改变这些组?
上述问题的实例化
假设我有一些值,它们被标记为组的一部分。
在某些群体中,价值观的传播范围太大。
我想对这些组的较低值进行调整。
我可以像这样生成一些合成数据:
groups <- floor(runif(1000,1,100))
values <- rnorm(1000,0,1)
df <- data.frame(group=groups,val=values)
我可以像这样识别感兴趣的群体:
groups_to_adjust <- df %>% group_by(group) %>% summarise(diff=max(val)-min(val)) %>% filter(diff>4) %>% select(group)
然后我可以像这样调整这些组:
df <- df %>% mutate(val=ifelse(group %in% groups_to_adjust$group, ifelse(val<0,val+4,val), val))
理想情况下,所有这些都可以在单个 dplyr 链中完成。有没有一种干净的方法来实现这一目标?我想:
df %>% group_by(group) %>% group_filter(max(val)-min(val)>4) %>% mutate(val=ifelse(val<0,val+4,val)) %>% ungroupfilter()
或类似的东西。
【问题讨论】:
-
ifelse、case_when或filter %>% mutate %>% left_join似乎是选项。