【问题标题】:Use grouped summary to operate in another data.frame column by factor使用分组汇总在另一个data.frame列中按因子进行操作
【发布时间】:2016-11-10 00:49:35
【问题描述】:

例如,我想计算分组 data.framesummary

df_summ = mtcars %>% group_by(am) %>% summarise(mean_mpg=mean(mpg))

     am mean_mpg
  (dbl)    (dbl)
1     0 17.14737
2     1 24.39231

为了稍后转换另一个共享相同因子级别但不共享行数的data.frame。例如,计算每组单个值的平均值的绝对差。

这是玩具示例

toy=data.frame(am=c(1,1,0,0),mpg=c(1,2,3,4))

我想做的计算是y = abs(toy$mpg- df_summ$mean_mpg) by factor。

我的头脑告诉我 dplyr 必须能够做到这一点,但我想不出办法。 我想保留原来的data.frame(如,使用mtcars %>% group_by(am) %>% mutate(...)

预期的输出是这样的

toy
  am mpg expected
1  1     1 23.39231
2  1     2 22.39231
3  0     3 14.14737
4  0     4 13.14737

【问题讨论】:

  • 而不是 summarise 删除所有其他列,使用 mutate,这会将 mean_mpg 列添加到现有数据框。
  • 很抱歉我的问题表述有误,让我编辑一下!
  • 样本数据和预期输出的例子会很好。
  • @zacdav 已编辑 :)

标签: r dplyr r-factor


【解决方案1】:

加入两个数据框,然后进行计算:

toy %>% 
    left_join(df_summ) %>% 
    mutate(y = abs(mpg - mean_mpg))

给予:

Joining, by = "am"
  am mpg mean_mpg        y
1  1   1 24.39231 23.39231
2  1   2 24.39231 22.39231
3  0   3 17.14737 14.14737
4  0   4 17.14737 13.14737

【讨论】:

  • 总是试图将 dfs 分开,从没想过加入他们。感谢您的方法,我只需要更改名称以确保 left_join 使用正确的因素(我实际上有多个因素,并且我要操作的变量当前具有相同的名称)但是您的方法很关键
猜你喜欢
  • 2016-12-31
  • 2021-04-29
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多