将一列分成 R 中的 n 级列

separate a column into n-levels columns in R

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

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

我想 "spread" 它是这样的:

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 不符合我的要求;如果 sepecies 只有一个 "use",它应该在 "use1",我不知道如何做到这一点

这是一种方法,假设行号的排序方式与您要使用的方式相同"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