我有几个具有不同数量的因子变量和输出变量的不同数据集。对于这些数据集中的每个数据集,我需要找到按行列的每个因子级别分组并进一步按所有变量(列)分组的观测行数。我以为for循环可能会解决问题,但是正在努力。有人可以帮忙吗?
数据集看起来像这样:
我希望输出成为 enter image description here
我尝试过
for (i in 1:length(df)){
df %>% group_by(df[[i]]) %>% summarise(n = length(i))%>%print()
}
但这似乎不起作用
答案 0 :(得分:2)
一种选择是将gather
转换为'long'格式,然后执行count
library(tidyverse)
gather(df1, Variable, Factor_Level, var1:var3) %>%
count(Variable, Factor_Level)
答案 1 :(得分:1)
如果您可以使用列表格式,则可以在创建列表后停止。但是,这是akrun提出的{:a=>-100}
方法的(有点复杂)替代方法:
gather
数据:
# Getting a vector of factor variables in dataset
factor_vars <- names(factor_vars)[sapply(mtcars, is.factor)]
# Creating list of frequency tables
freq_tables <- lapply(factor_vars, function(x) group_by_(mtcars, .dots = x) %>% tally())
freq_tables <- lapply(freq_tables, function(x) cbind(colnames(x)[1], x))
do.call(rbind, lapply(freq_tables, setNames, c("Factor", "Level", "Count")))
Factor Level Count
1 vs 0 18
2 vs 1 14
3 am 0 19
4 am 1 13
5 gear 3 15
6 gear 4 12
7 gear 5 5
8 carb 1 7
9 carb 2 10
10 carb 3 3
11 carb 4 10
12 carb 6 1
13 carb 8 1
答案 2 :(得分:0)
您应该能够执行
之类的操作by(data$x, data$y, function)
其中data$x
是您要排序的内容,data$y
是您要排序的内容,function
是您要对这些条目进行的操作(fx:均值,长度,shapiro.test等)。然后,您可以使用as.vector()
将此输出强制为向量。
例如,如果我有一个带有df <- dataframe(ID <- c(1, 1, 1, 1, 2, 2, 3), value <- (10, 20, 30, 40, 50, 60, 70))
的数据帧,那么运行as.vector(by(df$value, df$Id, lengh))
将返回向量(4, 2, 1)