我想获得数据框中每列的平均值,如下所示:
> x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
> x
x1 x2
[1,] 3 4
[2,] 3 3
[3,] 3 2
[4,] 3 1
[5,] 3 2
[6,] 3 3
[7,] 3 4
[8,] 3 5
> y <- colMeans(x)
> y
x1 x2
3 3
我可以从y
获得平均值,但y
不是数据框。如何获得数据框的返回值?我需要在cbind
上使用y
与其他数据框绑定。
答案 0 :(得分:0)
在你的例子中,x是一个矩阵。你有两个选择:
选项1 - 将x转换为数据帧,然后使用sapply
x<-as.data.frame(cbind(x1 = 3, x2 = c(4:1, 2:5)))
x.df<-sapply(x,FUN=mean)
> x.df
x1 x2
3 3
选项2 - 使用apply并将结果转换为数据框
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
x.df<-as.data.frame(t(apply((x),MARGIN=2,FUN=mean)))
> x.df
x1 x2
3 3
答案 1 :(得分:0)
我一直在寻找相同的东西,然后找到了如下所示的解决方案
您有一个数字数据集
df <- data.frame(a = c(623.3,515.2,611.0,729.0,843.25),
b = c(1,2,3,4,5),
c = c("name1","name2", "name3", "name4", "name5"))
您可以将其应用于某些特定列
mysummary <- function(x){
funs <- c(mean,sd,mad,IQR)
lapply(funs,function(f) f(x,na.rm = T))
}
mysummary(df$a)
mysummary(df$b)
或针对所有数据集
mysummary2 <- function(x){
if (is.numeric(x)){
c(mean(x),median(x),sd(x), mad(x), IQR(x))
}else{ print("pass")}
}
lapply(df,mysummary2)