r - 添加一个新列,将一个字符串映射到一个基于 "Rosetta Stone"数据框的新字符串?

标签 r gsub dplyr

我在 R 中有一个数据框。

我正在尝试添加/改变一个新列,该列使用定义我想要替换的字符串的映射/翻译/Rosetta Stone 数据框将几个旧字符串映射到新字符串。

我在想一些涉及 dplyr::mutate 和某种应用 gsub 的函数,但我无法将它们放在一起。

起始数据框:

  starting_df <- read.table(header=TRUE, text="
  ID   Genotype
  VIT_123_1    0
  ROM_456_2    0
  VIT_78_1     1
  BELG_910_1   1
")

Rosetta Stone 数据框架:

  map_df <- read.table(header=TRUE, text="
  ID   New_ID
  VIT   VCO1
  ROM   VRO1
  BELG  VBE2
")

所需的输出数据帧:

  >head(updated_df)
    ID           Genotype    New_ID
    VIT_123_1    0           VCO1_123_1
    ROM_456_2    0           VRO1_456_2
    VIT_78_1     1           VCO1_78_1
    BELG_910_1   1           VBE2_910_1

最佳答案

您可以使用 stringr 包中的 str_replace_all

首先将您的 map_df 数据帧转换为命名向量:

map_v = as.character(map_df$New_ID)
names(map_v) = map_df$ID

然后用新值替换旧值:

library(stringr)
res = starting_df
res$New_ID = str_replace_all(starting_df$ID,map_v)

          ID Genotype     New_ID
1  VIT_123_1        0 VCO1_123_1
2  ROM_456_2        0 VRO1_456_2
3   VIT_78_1        1  VCO1_78_1
4 BELG_910_1        1 VBE2_910_1

关于r - 添加一个新列,将一个字符串映射到一个基于 "Rosetta Stone"数据框的新字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48087072/

相关文章:

将 system2 标准输出重定向到 Windows 上的文件

html - Kable、Flextable、Huxtable 到 HTML : force the display of cell contents on a single line

r - 保护/加密 R 包代码以供分发

r - 防止在使用save()或save.image()时覆盖文件

r - 如何仅在 R 中提取第一个数字字符之前的所有文本

string - 替换包含特定字符串的整个表达式

删除数字后的括号,保留数字

r - 如何进一步操作从 R dplyr 中的 group_map() 创建的列表

r - 有没有办法在 dplyr 的 na_if 函数中列出值?

r - dplyr mutate_at 和 case_when