使用 summarize_all 与 colMeans 和 colVar 在 R 中创建旋转 table
Using summarize_all with colMeans and colVar to create pivoted table in R
我想对以下数据使用 summarize_all
并创建我想要的输出,但我很好奇如何使用 tidy
方法使用变异和总结的某种组合来做到这一点?感谢任何帮助!!
dummy <- tibble(
a = 1:10,
b = 100:109,
c = 1000:1009
)
期望的输出
tibble(
Mean = colMeans(dummy[1:3]),
Variance = colVars(as.matrix(dummy[1:3])),
CV = Variance/Mean
)
Mean Variance CV
<dbl> <dbl> <dbl>
1 5.5 9.17 1.67
2 104. 9.17 0.0877
3 1004. 9.17 0.00913
reshape 成'long' 格式然后按'name'
分组后再做一次会更容易
library(dplyr)
library(tidyr)
pivot_longer(dummy, cols = everything()) %>%
group_by(name) %>%
summarise(Mean = mean(value), Variance = var(value), CV = Variance/Mean) %>%
select(-name)
# A tibble: 3 x 3
# Mean Variance CV
# <dbl> <dbl> <dbl>
#1 5.5 9.17 1.67
#2 104. 9.17 0.0877
#3 1004. 9.17 0.00913
或者使用 summarise_all
或 summarise/across
,但输出将是单行,然后进行整形
dummy %>%
summarise(across(everything(), list(Mean = mean,
Variance = var, CV = ~ mean(.)/var(.)))) %>%
pivot_longer(everything()) %>%
separate(name, into = c('name', 'name2')) %>%
pivot_wider(names_from = name2, values_from = value)
我想对以下数据使用 summarize_all
并创建我想要的输出,但我很好奇如何使用 tidy
方法使用变异和总结的某种组合来做到这一点?感谢任何帮助!!
dummy <- tibble(
a = 1:10,
b = 100:109,
c = 1000:1009
)
期望的输出
tibble(
Mean = colMeans(dummy[1:3]),
Variance = colVars(as.matrix(dummy[1:3])),
CV = Variance/Mean
)
Mean Variance CV
<dbl> <dbl> <dbl>
1 5.5 9.17 1.67
2 104. 9.17 0.0877
3 1004. 9.17 0.00913
reshape 成'long' 格式然后按'name'
分组后再做一次会更容易library(dplyr)
library(tidyr)
pivot_longer(dummy, cols = everything()) %>%
group_by(name) %>%
summarise(Mean = mean(value), Variance = var(value), CV = Variance/Mean) %>%
select(-name)
# A tibble: 3 x 3
# Mean Variance CV
# <dbl> <dbl> <dbl>
#1 5.5 9.17 1.67
#2 104. 9.17 0.0877
#3 1004. 9.17 0.00913
或者使用 summarise_all
或 summarise/across
,但输出将是单行,然后进行整形
dummy %>%
summarise(across(everything(), list(Mean = mean,
Variance = var, CV = ~ mean(.)/var(.)))) %>%
pivot_longer(everything()) %>%
separate(name, into = c('name', 'name2')) %>%
pivot_wider(names_from = name2, values_from = value)