如何计算R中多个数据帧的平均值和Sd
我有两个数据帧,如下所示如何计算R中多个数据帧的平均值和Sd,r,R,我有两个数据帧,如下所示 df1 temp time mot 12 13 12 12 13 12 12 13 12 都是虚拟表,请假设我有多个列 logit计算每列的平均值和Sd,得到下表 Var1 Mean1 SD1 Var2 Mean2 SD2 temp1 12 0 temp2 7 0 time1 13 0 time2 4 4 mot1 1
df1
temp time mot
12 13 12
12 13 12
12 13 12
都是虚拟表,请假设我有多个列
logit计算每列的平均值和Sd,得到下表
Var1 Mean1 SD1 Var2 Mean2 SD2
temp1 12 0 temp2 7 0
time1 13 0 time2 4 4
mot1 12 0 mot2 3 1.732050808
我不得不对多个数据帧和多列执行此操作。尝试以下操作:
library(dplyr)
library(tidyr)
#Code
new <- df1 %>% bind_rows(df2,.id = 'id') %>%
pivot_longer(-id) %>%
mutate(Var=paste0(name,id)) %>%
group_by(Var,.drop = F) %>%
summarise(Mean=mean(value,na.rm = T),
SD=sd(value,na.rm = T))
#List
List <- split(new,gsub('[a-z]','',new$Var))
List <- lapply(1:length(List), function(x) {names(List[[x]])<-paste0(names(List[[x]]),x);List[[x]]})
#Bind
res <- do.call(bind_cols,List)
库(dplyr)
图书馆(tidyr)
#代码
新%bind_行(df2,.id='id')%>%
枢轴长度(-id)%>%
变异(Var=paste0(名称、id))%>%
分组依据(变量,.drop=F)%>%
总结(平均值=平均值(数值,na.rm=T),
SD=SD(数值,na.rm=T))
#名单
列出试试这个:
library(dplyr)
library(tidyr)
#Code
new <- df1 %>% bind_rows(df2,.id = 'id') %>%
pivot_longer(-id) %>%
mutate(Var=paste0(name,id)) %>%
group_by(Var,.drop = F) %>%
summarise(Mean=mean(value,na.rm = T),
SD=sd(value,na.rm = T))
#List
List <- split(new,gsub('[a-z]','',new$Var))
List <- lapply(1:length(List), function(x) {names(List[[x]])<-paste0(names(List[[x]]),x);List[[x]]})
#Bind
res <- do.call(bind_cols,List)
库(dplyr)
图书馆(tidyr)
#代码
新%bind_行(df2,.id='id')%>%
枢轴长度(-id)%>%
变异(Var=paste0(名称、id))%>%
分组依据(变量,.drop=F)%>%
总结(平均值=平均值(数值,na.rm=T),
SD=SD(数值,na.rm=T))
#名单
List您可以将数据帧放入一个列表中,并获得每个数据的列平均值和sd
list_df <- list(df1, df2)
result <- do.call(cbind,lapply(list_df, function(x)
data.frame(col = names(x), mean = colMeans(x), sd = sapply(x, sd))))
result
# col mean sd col mean sd
#temp temp 12 0 temp 7 0.000
#time time 13 0 time 4 0.000
#mot mot 12 0 mot 3 1.732
您可以将数据帧放入一个列表中,并获得每个数据的列平均值和sd
list_df <- list(df1, df2)
result <- do.call(cbind,lapply(list_df, function(x)
data.frame(col = names(x), mean = colMeans(x), sd = sapply(x, sd))))
result
# col mean sd col mean sd
#temp temp 12 0 temp 7 0.000
#time time 13 0 time 4 0.000
#mot mot 12 0 mot 3 1.732
对不起,我已经更新了我的问题的结果,@user330我已经更新了代码。希望这对你有用!有没有可能得到像结果一样的顺序?@user330只需添加这行代码res对不起,我已经更新了结果的问题,@user330我已经更新了代码。希望这对你有用!有没有可能得到像结果一样的顺序?@user330只需添加这行代码res
names(result) <- make.unique(names(result))