【问题标题】:How can I operate on elements of a data.frame in r, that creates a new column? [duplicate]如何对 r 中的 data.frame 的元素进行操作,从而创建一个新列? [复制]
【发布时间】:2015-08-01 21:15:18
【问题描述】:

假设我有一个 data.frame,df。

a b d
1 2 4
1 2 5
1 2 6
2 1 5
2 3 6
2 1 1

我想对其进行操作,以便对于 a 和 b 相等的所有地方,我计算 d 的平均值。

我发现使用聚合可以做到这一点, 聚合(d ~ a + b,df,均值) 这给了我一些合理的东西

a b d
1 2 5
2 1 3
2 3 6

但理想情况下,我希望保留我原来的 d 列,并添加一个新列 m,这样我就可以得到一个包含平均值的新列“m”的原始 data.frame,

a b d m
1 2 4 5
1 2 5 5
1 2 6 5
2 1 5 3
2 3 6 6
2 1 1 3

关于如何在 R 中“正确”执行此操作的任何想法?

【问题讨论】:

  • 您正在寻找ave,如with(df, ave(d, a, b))
  • 使用data.table:setDT(df)[,m:=mean(d), by=list(a,b)][]

标签: r merge dataframe aggregate


【解决方案1】:
library(dplyr)

df <- read.table(text = "a b d
1 2 4
1 2 5
1 2 6
2 1 5
2 3 6
2 1 1
" , header = T)


df %>% 
  group_by(a , b)  %>%
  mutate(m = mean(d))

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多