【问题标题】:Separate value in field by character, create multiple columns to the right based on the number of splits possible逐个字符分隔字段中的值,根据可能的拆分数量在右侧创建多个列
【发布时间】:2018-11-15 13:14:57
【问题描述】:

我已经问了一系列问题。

Separate contents of field

Separate variable in field by character.

我认为其中包含围绕同一主题的多个问题。

关于如何使用 separate_rows 我有很好的答案,然后是关于如何将第一作者和最后作者从字符向量中分离出来的很好的答案。

我现在想知道的是最后一点:

在这个答案Splitting column by separator from right to left in R

列数是已知的。 怎么说“用逗号分割这个字符串,然后根据原始字段右侧作者列表中的姓名数量将它们放入未知数量的列中”?

这样每个作者都成为单独字段中的一个值。 最初,我认为它会被投射/传播。 但是!

虽然这是我使用的示例: 作者

Drijgers RL、Verhey FR、Leentjens AF、Kahler S、Aalten P.

在许多情况下,论文的作者数量(不包括 et. al)将 >1,最多可能在 30 人左右。

所以。关于这三部分传奇的最后一个问题...... 如何将所有作者分开到一个新字段,以及是否可以将新字段命名为第一作者、第二作者等,直到最后作者。

这合理/清楚吗?

感谢有两三个人迅速提供帮助。

【问题讨论】:

  • 看看这个How to Ask
  • 这很有帮助,感谢您的反馈。我正在努力弄清楚如何才能做得更好。最初,我问了一个问题,它的反应非常快,然后我提出了一个建议,我将问题的第二部分作为一个新问题提出。我想是因为解决方案非常简单。然后下一个问题又被拆分为第三个问题。哪个给出了这个答案。我应该在这里做什么?
  • 您可以提供至少您已经尝试过的minimal reproducible example。而且可能不像漫画书那样写你的问题;)更多地坚持事实而不是写散文的节奏有助于我们更快地找到相关信息。
  • 好的。谢谢。我不想争论,但是当最初的问题被分解成多个问题时——然后呢?我将重点介绍船上的写作风格。
  • alaway 旨在帮助你的小伙子。回答这个问题:每个问题都应该符合问答格式。在开发过程中,一个问题可以拆分为多个较小的问题来解决是很常见的。但是多个小问题构成了大问题。当你问你的小问题时,你应该依赖于将它们简化为一个minimal reproducible example,除了你阅读和尝试过的关于特定问题的内容之外,它与任何东西都没有关联。无论如何,一旦您尝试自己回答问题,您就会学到这些东西。祝你有美好的一天:)

标签: r tidyr spread


【解决方案1】:

您可以使用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  

【讨论】:

  • 所以它与粘贴作者+行号发生了变异,它“由作者列表中的许多作者分割”。好的。谢谢!
  • mutate 只是为组中的每一行添加一个 ID。每个组的 ID 的一致标签允许扩展函数将它们变成列。
  • 是的。抱歉,我不知道该说什么。我可以看到它正在生成“密钥”以允许传播和标签。再次感谢!
猜你喜欢
  • 2019-03-18
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多