想知道如何在 R 中创建一个包含不同计算结果的表。这是一个使用 mtcars df 的示例
# Load tidyverse
library(tidyverse)
# Select only cyl vs and am from mtcars for simplicity
mt_select <- select(mtcars, c(cyl, vs, am))
# Here is the table I wish to make using some type of looping function
# (I have like 40 variables in actual dataset)
freq_table <- mt1 %>% group_by(cyl) %>%
summarise(n = n(),
vs_sum = sum(vs),
vs_perc = sum(vs)/n*100,
am_sum = sum(am),
am_perc = sum(am)/n*100)
print(freq_table)
这是我的尝试。我无法弄清楚的主要问题:
# make a vector to loop through
mt_vars <- names(mt_select)
# Loop to make tables
for (i in mt_vars){
mt_select %>%
group_by(cyl) %>%
count_(i) %>%
print()
}
几个月来一直试图弄清楚如何制作这个,但总是决定我不需要桌子或其他东西。任何帮助是极大的赞赏!!
您没有提供预期的输出,但我认为解决您的问题的关键可能是将您的数据转换为长格式。这可能会让你做你想做的事,而不需要任何循环。例如,mtcars
作为输入:
library(tidyverse)
mtcars %>%
pivot_longer(everything()) %>%
group_by(name) %>%
summarise(
n=n(),
valueSum=sum(value),
valuePct=valueSum/(n*100)
)
# A tibble: 11 × 4
name n valueSum valuePct
<chr> <int> <dbl> <dbl>
1 am 32 13 0.00406
2 carb 32 90 0.0281
3 cyl 32 198 0.0619
4 disp 32 7383. 2.31
5 drat 32 115. 0.0360
6 gear 32 118 0.0369
7 hp 32 4694 1.47
8 mpg 32 643. 0.201
9 qsec 32 571. 0.178
10 vs 32 14 0.00438
11 wt 32 103. 0.0322
这接近你想要的吗?如果您只想处理列的子集,请everything()
在filter
旋转之后或select
旋转之前替换您需要的内容。
另外,我不确定您要计算的百分比是多少。
value
和name
是 和 的names_to
默认values_to
值pivot_longer()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句