2017-10-09 30 views
1

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

在下面的脚本中,我只能指定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 = '_') 

EDIT

希望的输出:

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

我有点不确定你在问什么。你是否介意包含一个输出df的结果是什么样的? –

+0

也许[此帖](https://stackoverflow.com/questions/30592094/r-spreading-multiple-columns-with-tidyr)会有所帮助。如果你显示你想要的输出会很有帮助。 – lmo

+0

我的答案能解决您的问题吗? – useR

回答

3

dplyr + tidyr A液:

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