假设我有一个这样的数据框:
set.seed(123)
df <- as.data.frame(cbind(y<-sample(c("A","B","C"),10,T), X<-sample(c(1,2,3),10,T)))
df <- df[order(df$V1),]
Run Code Online (Sandbox Code Playgroud)
有一个简单的函数可以将V1求和(或任何FUN)V2并添加到df作为新列,这样:
df$sum <- c(6,6,8,8,8,8,6,6,6,6)
df
Run Code Online (Sandbox Code Playgroud)
我可能会为此编写一个函数,但我必须经常这样做,并且最好知道实现它的最简单方法.
我至少在他的第一点上同意@mnel.我没有ave在他引用的答案中看到证明,我认为这是"最简单"的基础R方法.使用该data.frame(cbind( ...))结构应该是非法的,并且证明它的教师应该被剥夺他们的证书.
set.seed(123)
df<-data.frame(y=sample( c("A","B","C"), 10, T),
X=sample(c (1,2,3), 10, T))
df<-df[order(df$y),] # that step is not necessary for success.
df
df$sum <- ave(df$X, df$y, FUN=sum)
df
y X sum
1 A 3 6
6 A 3 6
3 B 3 8
7 B 1 8
9 B 1 8
10 B 3 8
2 C 2 6
4 C 2 6
5 C 1 6
8 C 1 6
Run Code Online (Sandbox Code Playgroud)