pivot column into row titles in R?

Kil*_*ail 2 r dplyr

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)

但是我仍然得到相同数量的行,是否没有将它们折叠成每格打开?

akr*_*run 5

一种选择是使用创建另一个1列transform,并将该列用作value.varindcast

library(reshape2)
dcast(transform(df, ind=1), division~category, value.var='ind')
Run Code Online (Sandbox Code Playgroud)

或如@MichaelChirico所述,我们可以指定fun.aggregatelength

dcast(df, division~category, length)
Run Code Online (Sandbox Code Playgroud)

或者,如果使用dplyr/tidyrmutate则数据集将创建新列,然后spread从“长”到“宽”。spread始终需要包含要放入输出中的值的列data.frame。这在OP的示例中不存在,添加它可以解决此问题。

library(dplyr)
library(tidyr)
df %>% 
   mutate(ind=1) %>% 
   spread(category,ind)
Run Code Online (Sandbox Code Playgroud)

  • 也许`dcast(setDT(df),division〜category,fun.agg = length)`是所需的值吗?@akrun取决于OP是否需要计数或仅是指标 (2认同)