我有一个包含三列的数据表:准确率,特异性和灵敏度。对于每一列,我想计算每一列的平均值和标准差。我希望结果是一个包含六列的数据表(Accuracy.mean,Accuracy.sd,Specificity.mean,Specificity.sd,...)。到目前为止,我做了这个:
test<-function(x){
c(mean = mean(x),sd = sd(x))
}
b<-a[ ,lapply(.SD, test)]
我每列都得到了两行,该如何解决这个问题?
我有一个包含三列的数据表:准确率,特异性和灵敏度。对于每一列,我想计算每一列的平均值和标准差。我希望结果是一个包含六列的数据表(Accuracy.mean,Accuracy.sd,Specificity.mean,Specificity.sd,...)。到目前为止,我做了这个:
test<-function(x){
c(mean = mean(x),sd = sd(x))
}
b<-a[ ,lapply(.SD, test)]
我每列都得到了两行,该如何解决这个问题?
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)
lapply
将为每个列调用一次(在您的情况下为3次)。它将返回一个包含3个项目的列表(每个项目包含2个叶子)。默认情况下,它将强制转换为2行,但 unlist
将使其变为1行。尝试这两个命令,您就会明白:1)lapply(a, test) %>% as.data.frame()
2)lapply(a, test) %>% unlist()
- MKR
b<-a[ ,unlist(lapply(.SD, test))]
- MKR