用dplyr
来制表几个共享相同“级别”以产生以下输出的变量的方法是什么?
df <- data.frame(v1 = c("sometimes", "sometimes", "rarely", "never", "often",
"often"),
v2 = c("often", "sometimes", "rarely", "never", "rarely",
"often"))
tab <- data.frame(cbind(table(df$v1), table(df$v2)))
names(tab) <- names(df)
tab
# v1 v2
#never 1 1
#often 2 2
#rarely 1 2
#sometimes 2 1
答案 0 :(得分:3)
您可以使用这种方法:
use ConsoleTVs\Charts\Classes\ChartJs\Chart;
@Frank指出,您可以直接使用> df %>%
gather(var) %>%
group_by(var) %>%
count(value) %>%
spread(var, n)
# A tibble: 4 x 3
value v1 v2
<chr> <int> <int>
1 never 1 1
2 often 2 2
3 rarely 1 2
4 sometimes 2 1
,而无需使用group_by
,按组进行计数,如下所示:
count()
答案 1 :(得分:1)
一种方法是将数据转换为“长”格式,这样可以更轻松地简单地计算标签的出现次数,然后spread
将它们转换为所需的格式。
df.count <- df %>%
gather(variable, value) %>%
group_by(variable, value) %>%
count %>%
spread(variable, n)
value v1 v2
<chr> <int> <int>
1 never 1 1
2 often 2 2
3 rarely 1 2
4 sometimes 2 1
当然,dplyr
并非绝对必要:
df2 <- sapply(df, table)
这将产生一个命名矩阵,而不是数据帧:
v1 v2
never 1 1
often 2 2
rarely 1 2
sometimes 2 1
通过更多的工作,您可以将其转换为数据框:
df2 <- sapply(df, table) %>%
as.data.frame %>%
rownames_to_column(var = 'level')