我有一个物种数据框,如下所示:
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”中,我不知道如何做到这一点
答案 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