将列分隔为R中的n级列

时间:2017-10-24 17:29:22

标签: r dplyr tidyr

我有一个物种数据框,如下所示:

df <- data.frame("especie" = c("abies", "abies", "acacia", "acacia", "acacia"), "use"=c("ornamental", "wood", "wood", "medicine", "firewood"))

df
  especie        use
1   abies ornamental
2   abies       wood
3  acacia       wood
4  acacia   medicine
5  acacia   firewood

我想“传播”它,就像这样:

df2 <- data.frame("species"=c("abies", "acacia"), "use1"=c("ornamental", "wood"), "use2"=c("wood", "medicine"),
                                      "use3"=c("", "firewood"), "use4"=c("", ""))

 df2
  species       use1     use2     use3 use4
1   abies ornamental     wood              
2  acacia       wood medicine firewood 

我不想要一个具有每个级别名称的列,所以tidyr :: spread不能做我想要的;如果种类只有一个“使用”,它应该在“use1”中,我不知道如何做到这一点

1 个答案:

答案 0 :(得分:2)

这是一种方法,假设行号的排序方式与使用“use1 ... use3”相同,而use4并不重要(它全部为空白?)

library(dplyr)
library(tidyr)

df %>%
  group_by(especie) %>%
  mutate(rowNum = paste0("use",row_number())) %>%
  spread(rowNum, use)

结果是......

# A tibble: 2 x 4
# Groups:   especie [2]
  especie       use1     use2     use3
*  <fctr>     <fctr>   <fctr>   <fctr>
1   abies ornamental     wood       NA
2  acacia       wood medicine firewood