R 应用的可变版本?
我试图获得dataframe中每个子集的平均值,并将该信息合并到一列中 我可以用lappy做,但我不能让它“粘住”。是否存在具有副作用的apply系列功能变体?图书馆里的任何东西都可以R 应用的可变版本?,r,dataframe,R,Dataframe,我试图获得dataframe中每个子集的平均值,并将该信息合并到一列中 我可以用lappy做,但我不能让它“粘住”。是否存在具有副作用的apply系列功能变体?图书馆里的任何东西都可以 data <- data.frame( A = sample(LETTERS[1:3], 20, replace=TRUE), B = runif(20), C = LETTERS[1:20]) # split by A dataByA <- split(data, factor(data
data <- data.frame(
A = sample(LETTERS[1:3], 20, replace=TRUE),
B = runif(20),
C = LETTERS[1:20])
# split by A
dataByA <- split(data, factor(data$A))
# get average of B per set
lapply(dataByA, function(df) {df$Bmean <- mean(df$B)}) # does nothing!
# remerge subsets
data <- rbind.fill(dataByA)
data这类事情有很多选择,但是为了纠正您的直接错误,您在lappy
中的匿名函数根本不返回任何内容。只需让它返回正在操作的部件:
{df$Bmean <- mean(df$B); df}
{df$Bmean这可能有效:
library(plyr)
data1<-ddply(data,.(A),transform,Bmean=mean(B))
head(data1)
A B C Bmean
1 A 0.616156407 E 0.5492000
2 A 0.568187293 G 0.5492000
3 A 0.899395311 H 0.5492000
4 A 0.113060973 K 0.5492000
5 B 0.872838203 A 0.7885643
6 B 0.906216467 B 0.7885643
7 B 0.944196701 N 0.7885643
8 B 0.445983319 O 0.7885643
9 B 0.773586589 T 0.7885643
库(plyr)
数据1试试这个:
data$Bmean <- ave(data$B, data$A)
data$Bmean根据@joran的说法,我将是其中一员;)
data.table中的解决方案如下
DT[ , Bmean := mean(B), by=A]
其中,DT
是
library(data.table)
DT <- data.table( <your data frame> )
库(data.table)
DT完美。我不熟悉变换函数。谢谢!@G.Grothendieck,谢谢你指出了这一点。修复了答案。