将列转换为R中的行标题?

时间:2015-08-31 13:48:34

标签: r dplyr

我有一个数据框

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)

但我仍然得到相同数量的行,并没有将它们折叠成每个分区开放?

1 个答案:

答案 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/tidyrmutate数据集来创建新列,然后spread从'long'到'wide'。 spread始终需要包含要放入输出data.frame的值的列。这在OP的示例中不存在,并且添加它解决了这个问题。

library(dplyr)
library(tidyr)
df %>% 
   mutate(ind=1) %>% 
   spread(category,ind)