I have a dataframe
division | category
A | tools
A | work
B | tools
B | books
Run Code Online (Sandbox Code Playgroud)
两列都是因子变量。如何旋转类别列,以便获得:
division | tools | books | work
A 1 1
B 1 1
Run Code Online (Sandbox Code Playgroud)
我尝试使用dplyr
wide <- df %>%
spread(division, category)
Run Code Online (Sandbox Code Playgroud)
但是我仍然得到相同数量的行,是否没有将它们折叠成每格打开?
一种选择是使用创建另一个1列transform,并将该列用作value.varindcast
library(reshape2)
dcast(transform(df, ind=1), division~category, value.var='ind')
Run Code Online (Sandbox Code Playgroud)
或如@MichaelChirico所述,我们可以指定fun.aggregate为length
dcast(df, division~category, length)
Run Code Online (Sandbox Code Playgroud)
或者,如果使用dplyr/tidyr,mutate则数据集将创建新列,然后spread从“长”到“宽”。spread始终需要包含要放入输出中的值的列data.frame。这在OP的示例中不存在,添加它可以解决此问题。
library(dplyr)
library(tidyr)
df %>%
mutate(ind=1) %>%
spread(category,ind)
Run Code Online (Sandbox Code Playgroud)