将行转置为具有多个类别dplyr的列

时间:2017-10-09 14:57:00

标签: r dplyr tidyr spread

我想使用tidyr的扩展函数将行和多列中具有多个id的数据帧转换为带有一行的df,其中我们有id和类别的所有组合的指示符列。如果dplyrtidyr不是最合适的,请打开其他类似扩散的功能。

在下面的脚本中,我只能指定1列作为值对。我想将cat1和cat2作为值列。另外,我希望字段名称为“sentid1_cat1,sentid1_cat2”等。

test.df <- data.frame(sentid = 1:3, 
                      cat1 = c(1,0,0), 
                      cat2 = c(0,1,0))

test.df %>%
    spread(key = sentid, value = cat1, sep = '_')

修改

期望的输出:

output.df <- data.frame(sentid1_cat1 = 1,
                        sentid1_cat2 = 0,
                        sentid2_cat1 = 0,
                        sentid2_cat2 = 1,
                        sentid3_cat1 = 0,
                        sentid3_cat2 = 0)

1 个答案:

答案 0 :(得分:3)

dplyr + tidyr的解决方案:

library(dplyr)
library(tidyr)

test.df %>%
  gather(variable, value, -sentid) %>%
  unite(variable, sentid, variable) %>%
  mutate(variable = paste0("sentid", variable)) %>%
  spread(variable, value) 

<强>结果:

  sentid1_cat1 sentid1_cat2 sentid2_cat1 sentid2_cat2 sentid3_cat1 sentid3_cat2
1            1            0            0            1            0            0