当有两个标识符时,我想按组获取平均值。假设我有以下数据集:
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/