用R中数据帧中的平均值替换值

用R中数据帧中的平均值替换值,r,R,我需要将数据帧中两个副本(A和B)的值替换为它们的平均值 这是数据帧: Sample.Name <- c("sample01","sample01","sample02","sample02","sample03","sample03") Rep <- c("A", "B", "A", "B", "A", "B") Rep <- as.factor(Rep) joy <- sample(1000:50000000, size=120, replace=TRUE) valu

我需要将数据帧中两个副本(A和B)的值替换为它们的平均值

这是数据帧:

Sample.Name <- c("sample01","sample01","sample02","sample02","sample03","sample03")
Rep <- c("A", "B", "A", "B", "A", "B")
Rep <- as.factor(Rep)
joy <- sample(1000:50000000, size=120, replace=TRUE)
values <- matrix(joy, nrow=6, ncol=20)
df.data <- cbind.data.frame(Sample.Name, Rep, values)
names(df.data)[-c(1:2)] <- paste("V", 1:20, sep="")

Sample.Name我想你应该
聚合你的数据帧。试试这个:

aggregate(df.data, by=list(Sample.Name), FUN=mean)

出于好奇,我尝试了一种基于tapply的解决方案

# Not correct: lapply(df.data[-(1:3)], tapply, INDEX=df.data$Sample.Name, FUN=mean)
它只需要
as.data.frame
来“清理它”

编辑:像@daroczig一样,我收到一个错误,抱怨trim参数的长度不是1。因此,尝试添加更多参数form mean,但只有当我也更改为“[”的双参数版本时,我才成功地满足解释器的要求,但仍然无法获得函数应用程序的正确分组。此版本确实有效:

as.data.frame(lapply(df.data[, 3:22], 
                       function(x) tapply(x, df.data$Sample.Name, FUN=mean))  )

A
data.table
时间和内存效率解决方案

library(data.table)
DT <- as.data.table(df.data)
DT[,lapply(.SD, mean),by = Sample.Name, .SDcols = paste0('V',1:20)]
库(data.table)

DT这很酷@DWin,很好的发人深省(+1)!不知怎的,我在运行你的代码时遇到了错误,我可以通过在内部函数中调用
tapply
来运行它,比如:
as.data.frame(lappy(df.data[,-c(1:3)],函数(x)tapply(x,INDEX=df.data$Sample.Name,FUN=mean)))
我想我一定是加载了另一个附加功能的包。我在另一个会话中也遇到了一个错误,抱怨“trim”的长度不是1。我会看看我能推断出什么。
as.data.frame(lapply(df.data[, 3:22], 
                       function(x) tapply(x, df.data$Sample.Name, FUN=mean))  )
library(data.table)
DT <- as.data.table(df.data)
DT[,lapply(.SD, mean),by = Sample.Name, .SDcols = paste0('V',1:20)]