我想基于因子列添加一列均值R
data.frame
.像这样:
df1 <- data.frame(X = rep(x = LETTERS[1:2], each = 3), Y = 1:6)
df2 <- aggregate(data = df1, Y ~ X, FUN = mean)
df3 <- merge(x = df1, y = df2, by = "X", suffixes = c(".Old",".New"))
df3
# X Y.Old Y.New
# 1 A 1 2
# 2 A 2 2
# 3 A 3 2
# 4 B 4 5
# 5 B 5 5
# 6 B 6 5
Run Code Online (Sandbox Code Playgroud)
要完成这个问题,我要创建两个不必要的data.frames
.我想知道一种方法,可以通过因子列将一列方法附加到我的原始列中data.frame
而不创建任何额外的data.frames
.谢谢你的时间和帮助.
Jaa*_*aap 15
两种替代方法:
1.使用dplyr包:
library(dplyr)
df1 <- df1 %>%
group_by(X) %>%
mutate(Y.new = mean(Y))
Run Code Online (Sandbox Code Playgroud)
2.使用data.table包:
library(data.table)
setDT(df1)[, Y.new := mean(Y), by = X]
Run Code Online (Sandbox Code Playgroud)
两者都给出以下结果:
Run Code Online (Sandbox Code Playgroud)> df1 X Y Y.new 1: A 1 2 2: A 2 2 3: A 3 2 4: B 4 5 5: B 5 5 6: B 6 5
ddply
并transform
拯救(虽然我相信你至少会有4种不同的方式来做到这一点):
library(plyr)
ddply(df1,.(X),transform,Y.New = mean(Y))
X Y Y.New
1 A 1 2
2 A 2 2
3 A 3 2
4 B 4 5
5 B 5 5
6 B 6 5
Run Code Online (Sandbox Code Playgroud)