将mean和sd应用于数据表的每一列

时间:2018-03-18 17:34:24

标签: r

我有一个包含三列的数据表:准确性,特异性和灵敏度。对于每列,我想计算每列的平均值和sd。我希望结果是一个包含六列的数据表(Accuracy.mean,Accuracy.sd,Specificity.mean,Specificity.sd,...)。到目前为止,我做到了这一点:

test<-function(x){
  c(mean = mean(x),sd = sd(x))
}
b<-a[ ,lapply(.SD, test)]

有了这个,每列都会得到两行。 我怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

你非常接近。只需使用unlist而不是lapply就可以了。

b<-a[ ,unlist(lapply(.SD, test))]
b
#Accuracy.mean Accuracy.sd Specificity.mean Specificity.sd Sensitivity.mean Sensitivity.sd 
# 5.50000       3.02765         16.50000        3.02765      105.50000          3.02765 

非常简单,dplyr为:

library(dplyr)
summarise_all(a, .funs = funs(mean, sd))
#Accuracy_mean Specificity_mean Sensitivity_mean Accuracy_sd Specificity_sd Sensitivity_sd
#1           5.5             16.5            105.5     3.02765        3.02765        3.02765

OP创建的功能

test<-function(x){
  c(mean = mean(x),sd = sd(x))
}

样本数据

library(data.table)
a<- data.table(Accuracy = 1:10, Specificity = 12:21, Sensitivity = 101 : 110)