我已经获得了一些值,这些值被标记为群组的一部分。
在某些群体中,价值观的传播太大了。
我想调整这些组的较低值。
我可以像这样生成一些合成数据:
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 %>% rowwise() %>% mutate(val=ifelse(group %in% groups_to_adjust, ifelse(val<0,val+4,val), val))
但不!这不起作用?
使用
df %>% rowwise() %>% filter(group %in% groups_to_adjust)
表示%in%
运算符实际上根本没有选择任何行。
我该如何执行此操作?
答案 0 :(得分:1)
我们需要从“groups_to_adjust”数据集中提取“组”。
r1 <- df %>%
filter(group %in% groups_to_adjust$group)
因为它是带有两列的'data.frame'
str(groups_to_adjust)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 16 obs. of 2 variables:
# $ group: num 12 13 23 35 40 42 46 53 54 56 ...
# $ diff : num 4.09 4.66 4.52 4.3 4.33 ...
我们可以使用filter
df1 <- copy(df)
r2 <- df %>%
group_by(group) %>%
filter((max(val)- min(val)) > 4)
all.equal(r1, r2, check.attributes=FALSE)
#[1] TRUE