计算R中不同组之间的平均值和标准偏差
我有以下数据集:计算R中不同组之间的平均值和标准偏差,r,tidyverse,R,Tidyverse,我有以下数据集: df1如果我们需要做相应的组汇总,那么使用map2 library(dplyr) library(purrr) library(rowr) map2(names(df1)[1:3], names(df1)[4:6], ~ df1 %>% dplyr::select(.x, .y) %>% group_by_at(.x) %>% summarise_at(1, list(sd = s
df1如果我们需要做相应的组汇总,那么使用map2
library(dplyr)
library(purrr)
library(rowr)
map2(names(df1)[1:3], names(df1)[4:6], ~
df1 %>%
dplyr::select(.x, .y) %>%
group_by_at(.x) %>%
summarise_at(1, list(sd = sd, mean = mean))) %>%
reduce(cbind.fill, fill = NA)
# people sd mean time sd.1 mean.1 range sd mean
#1 1 1.000000 2 21 0.7071068 4.5 2 1.258306 3.750000
#2 11 2.828427 3 33 2.1213203 3.5 12 2.081666 2.666667
#3 12 1.414214 2 41 1.7320508 4.0 NA NA NA
map2(df1[1:3], df1[4:6], ~
tibble(grp = .x, value = .y) %>%
group_by(grp) %>%
summarise(valueSD = sd(value), valueMean = mean(value))) %>%
reduce(cbind.fill, fill = NA)
或者,我们可以在map2
library(dplyr)
library(purrr)
library(rowr)
map2(names(df1)[1:3], names(df1)[4:6], ~
df1 %>%
dplyr::select(.x, .y) %>%
group_by_at(.x) %>%
summarise_at(1, list(sd = sd, mean = mean))) %>%
reduce(cbind.fill, fill = NA)
# people sd mean time sd.1 mean.1 range sd mean
#1 1 1.000000 2 21 0.7071068 4.5 2 1.258306 3.750000
#2 11 2.828427 3 33 2.1213203 3.5 12 2.081666 2.666667
#3 12 1.414214 2 41 1.7320508 4.0 NA NA NA
map2(df1[1:3], df1[4:6], ~
tibble(grp = .x, value = .y) %>%
group_by(grp) %>%
summarise(valueSD = sd(value), valueMean = mean(value))) %>%
reduce(cbind.fill, fill = NA)
或使用lappy
lapply(1:3, function(i)
df1[c(i, i + 3)] %>%
group_by_at(1) %>%
summarise_all(list(mean, sd))) %>%
reduce(cbind.fill, fill = NA)
您可以将其包装在列表(sd,mean)
中。请注意,当您按3进行分组时。列,其中一些列只有一行,这意味着您的sd将是NAPLE checkdf1%>%count(人员、时间、范围)
每个组只有一行我想说的是count
的频率是1,因为您正试图按组执行sd
您需要相应的组/平均值/sd,即map2(名称(df1)[1:3],名称(df1)[4:6],~df1%>%select(.x,.y)%>%group\u by\u at(.x)%>%summary\u at(1,list(sd=sd,mean=mean))
@User20100更新为lappy