r - 如何按组跨行获得重复的平均值

标签 r dplyr data.table tidyverse

当有两个标识符时,我想按组获取平均值。假设我有以下数据集:

set.seed(123)
df <- data.frame(id = 1:2,
                 id2 = c("a","b", "c","c", "b","c", "a","b", "c","b"),
                 var1 = runif(10))
                 

我正在尝试使用 data.table 获取 2 组的平均值。我想创建另一个包含平均值的列(avg)。这意味着,当平均值与 id 和 id2 匹配时,平均值将在各行中重复。这就是我正在尝试做的事情:

setDT(df)[, avg := mean(var1), by=list(id,id2)]

所以,只是为了澄清一下。有两个值标识为 id=1 和 id2=a。平均值为 (0.2875775 + 0.5281055)/2 = 0.4078415。我希望该值在第 1 行和第 7 行(对应于 id=1 和 id2 = a)旁边重复,并依次重复所有其他平均值。我怎样才能做到这一点?

最佳答案

library(tidyverse)

df %>% 
  group_by(id, id2) %>%
  mutate(avg = mean(var1))

      id id2     var1   avg
   <int> <chr>  <dbl> <dbl>
 1     1 a     0.288  0.408
 2     2 b     0.788  0.712
 3     1 c     0.409  0.480
 4     2 c     0.883  0.464
 5     1 b     0.940  0.940
 6     2 c     0.0456 0.464
 7     1 a     0.528  0.408
 8     2 b     0.892  0.712
 9     1 c     0.551  0.480
10     2 b     0.457  0.712

您提供的代码也使用 data.table 执行相同的任务。 请注意,setDT 将转换相同的 df,如果您打印 df,则不会创建附加列。

关于r - 如何按组跨行获得重复的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74091377/

相关文章:

r - 获取用户坐标中的边界线位置 (mgp)

r - 执行后复制脚本

r - 当值重复 3 次或更多次时创建新列

r - 在 mutate 内循环

r - 通过多个分组顺序变量折叠和粘贴文本

r - 使用 fill() 函数将名称填充到列中

r - 使用 dplyr 将数据传递给 forecast.lm 并执行

R:加速功能的建议(删除数据框中的重复项)

r - 当表通过选择列为 ("index"时,data.table 中的辅助键 "copied"属性会丢失

r - 加速矢量创建