我在 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/