按字符分隔字段中的值,根据可能的拆分数量在右侧创建多个列
Separate value in field by character, create multiple columns to the right based on the number of splits possible
我问了一系列问题。
我认为其中包含围绕同一主题的多个问题。
关于如何使用 separate_rows 我有很好的答案,然后关于如何从字符向量中分离第一作者和最后作者的答案也很好。
我现在想知道的是最后一点:
在这个回答中Splitting column by separator from right to left in R
列数已知。
"split this string at commas, and throw them into an unknown number of columns based on the number of names in the author list to the right of the original field"怎么说?
这样每位作者都成为单独字段中的一个值。
最初,我认为它会是 cast/spread。
但是!
虽然这是我使用的示例:
作者
Drijgers RL、Verhey FR、Leentjens AF、Kahler S、Aalten P.
在许多情况下,论文的作者人数(不包括等人)将 >1,最多可能在 30 人左右。
所以。关于这三个部分的传奇的最后一个问题......
我如何将所有作者分离到一个新字段,以及我是否可以将新字段命名为第一作者、第二作者等,直到最后作者。
是sensible/clear吗?
感谢有两三个人很快提供帮助。
您可以使用 str_split
将您的作者列拆分为一个列表,然后使用 unnest
获取长格式数据框,每一行都有一个新作者。然后使用 spread
和 ID 列将数据转换为宽格式。
library(dplyr)
library(tidyr)
df <- data.frame(publication = c("pub1","pub2","pub3"),author = c("Drijgers RL, Verhey FR, Leentjens AF, Kahler S, Aalten P","test author","test arthur, another author"))
df
# publication author
#1 pub1 Drijgers RL, Verhey FR, Leentjens AF, Kahler S, Aalten P
#2 pub2 test author
#3 pub3 test arthur, another author
df %>% group_by(publication) %>% mutate(author = str_split(author,", ")) %>% unnest %>% mutate(ID = paste0("author_",row_number())) %>% spread(ID,author)
# A tibble: 3 x 6
# Groups: publication [3]
# publication author_1 author_2 author_3 author_4 author_5
# <fct> <chr> <chr> <chr> <chr> <chr>
#1 pub1 Drijgers RL Verhey FR Leentjens AF Kahler S Aalten P
#2 pub2 test author NA NA NA NA
#3 pub3 test arthur another author NA NA NA
我问了一系列问题。
我认为其中包含围绕同一主题的多个问题。
关于如何使用 separate_rows 我有很好的答案,然后关于如何从字符向量中分离第一作者和最后作者的答案也很好。
我现在想知道的是最后一点:
在这个回答中Splitting column by separator from right to left in R
列数已知。 "split this string at commas, and throw them into an unknown number of columns based on the number of names in the author list to the right of the original field"怎么说?
这样每位作者都成为单独字段中的一个值。 最初,我认为它会是 cast/spread。 但是!
虽然这是我使用的示例: 作者
Drijgers RL、Verhey FR、Leentjens AF、Kahler S、Aalten P.
在许多情况下,论文的作者人数(不包括等人)将 >1,最多可能在 30 人左右。
所以。关于这三个部分的传奇的最后一个问题...... 我如何将所有作者分离到一个新字段,以及我是否可以将新字段命名为第一作者、第二作者等,直到最后作者。
是sensible/clear吗?
感谢有两三个人很快提供帮助。
您可以使用 str_split
将您的作者列拆分为一个列表,然后使用 unnest
获取长格式数据框,每一行都有一个新作者。然后使用 spread
和 ID 列将数据转换为宽格式。
library(dplyr)
library(tidyr)
df <- data.frame(publication = c("pub1","pub2","pub3"),author = c("Drijgers RL, Verhey FR, Leentjens AF, Kahler S, Aalten P","test author","test arthur, another author"))
df
# publication author
#1 pub1 Drijgers RL, Verhey FR, Leentjens AF, Kahler S, Aalten P
#2 pub2 test author
#3 pub3 test arthur, another author
df %>% group_by(publication) %>% mutate(author = str_split(author,", ")) %>% unnest %>% mutate(ID = paste0("author_",row_number())) %>% spread(ID,author)
# A tibble: 3 x 6
# Groups: publication [3]
# publication author_1 author_2 author_3 author_4 author_5
# <fct> <chr> <chr> <chr> <chr> <chr>
#1 pub1 Drijgers RL Verhey FR Leentjens AF Kahler S Aalten P
#2 pub2 test author NA NA NA NA
#3 pub3 test arthur another author NA NA NA