将一列分成 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
我有一个包含物种的数据框,如下所示:
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