我有一个数据框
division | category
A | tools
A | work
B | tools
B | books
两列都是因子变量。 如何透过类别列以便得到:
division | tools | books | work
A 1 1
B 1 1
我尝试使用dplyr
wide <- df %>%
spread(division, category)
但我仍然得到相同数量的行,并没有将它们折叠成每个分区开放?
答案 0 :(得分:5)
一种选择是使用transform
创建另一列1,并将该列用作value.var
中的dcast
library(reshape2)
dcast(transform(df, ind=1), division~category, value.var='ind')
或者@MichaelChirico提到,我们可以将fun.aggregate
指定为length
dcast(df, division~category, length)
或者,如果我们使用dplyr/tidyr
,mutate
数据集来创建新列,然后spread
从'long'到'wide'。 spread
始终需要包含要放入输出data.frame
的值的列。这在OP的示例中不存在,并且添加它解决了这个问题。
library(dplyr)
library(tidyr)
df %>%
mutate(ind=1) %>%
spread(category,ind)