【问题标题】:Can I split character vector based on position in R?我可以根据 R 中的位置拆分字符向量吗?
【发布时间】:2020-10-13 14:51:10
【问题描述】:

这是我的第一篇文章,所以所有的发帖技巧都很有帮助:)

我想合并两个具有相同人员 ID 的数据框,但标识符彼此略有(但系统地)不同。

  • 在 df A 中,ID 是:
  • 在 df B 中,ID 是:-

请看下面的例子:

A_ID <- c("A123", "B213", "C421", "C312")
A_score <- c(8,10,9,10)
A <- data.frame(A_ID, A_score)
colnames(A) <- c("ID", "A_score")


B_ID <- c("A-123", "B-213", "C-421", "C-312")
B_score <- c(2,10,9,10)
B <- data.frame(B_ID, B_score)
colnames(B) <- c("ID", "B_score")

问题是因为-在df B标识符中间,这些dfs不会合并。

我想要实现的是合并 (fulljoin) dfs 以形成列:ID | A_score | B_score.

我尝试将字符向量转换为字符串,然后将ID (A) 在字母后的字符位置 2 处拆分,添加一个 -,然后粘贴并转换回字符向量。但我觉得这可能不是最有效和最简单的方法。

谢谢!

【问题讨论】:

    标签: r dataframe split identifier


    【解决方案1】:

    尝试使用gsub() 清理第二个 id 变量,然后将数据帧合并到一个数据管道中。这里使用tidyverse函数的代码:

    library(tidyverse)
    #Code
    NewA <- A %>% full_join(B %>% mutate(ID=gsub('-','',ID)))
    

    输出:

        ID A_score B_score
    1 A123       8       2
    2 B213      10      10
    3 C421       9       9
    4 C312      10      10
    

    【讨论】:

      【解决方案2】:

      使用sub 删除- 然后merge

      B$ID <- sub("-", "", B$ID)
      merge(A, B, "ID")
          ID A_score B_score
      1 A123       8       2
      2 B213      10      10
      3 C312      10      10
      4 C421       9       9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-03
        • 2018-04-02
        相关资源
        最近更新 更多