R 将平均值和sd应用于数据表的每一列

R 将平均值和sd应用于数据表的每一列,r,R,我有一个数据表,有三列:准确性、特异性和敏感性。对于每一列,我想计算每一列的平均值和标准差。我希望结果是一个有六列的数据表(accurity.mean,accurity.sd,specification.mean,specification.sd,…)。到目前为止,我做到了: test<-function(x){ c(mean = mean(x),sd = sd(x)) } b<-a[ ,lapply(.SD, test)] test你很接近了。只要在lappy上使用unlis

我有一个数据表,有三列:准确性、特异性和敏感性。对于每一列,我想计算每一列的平均值和标准差。我希望结果是一个有六列的数据表(accurity.mean,accurity.sd,specification.mean,specification.sd,…)。到目前为止,我做到了:

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

test你很接近了。只要在
lappy
上使用
unlist

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 
由OP创建的函数

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

<代码>测试请考虑,谢谢。尝试<代码>谢谢,它工作。你能解释一下使用unlist的原因吗?以及如何使结果成为数据table@costa_25
lappy
将为每列调用一次(在您的情况下为3次)。它将返回一个包含3个项目的列表(每个项目包含2个leaf)。默认情况下,它将强制显示在2行中,但
取消列出将使其成为1行。试试这两个,你就会明白:1)
lappy(a,test)%%>%as.data.frame()
2)
lappy(a,test)%%>%unlist()
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)