R 基于另一个数据帧替换数据帧中一列中的多个值

R 基于另一个数据帧替换数据帧中一列中的多个值,r,dataframe,R,Dataframe,我是新手。我有一个数据框genes,它包含两列:Index和Name,例如: 索引名 1A 2 B 3 C 4d 另一个数据帧相似性包含6-7列,其中一列是成员,其中包括不同的索引值,这些值由空格分隔,例如: 成员 1 3 5 7 3 7 6 9 2 我试图做的是通过匹配数据框genes中的index列,将索引替换为Names。如果在基因上找不到索引,我只想把NA放在它的位置上 因此,根据示例,我希望的输出是: 成员 A C NA NA 卡纳 NA NA B 我们可以使用chartr和gsub

我是新手。我有一个数据框
genes
,它包含两列:
Index
Name
,例如:

索引名
1A
2 B
3 C
4d

另一个数据帧
相似性
包含6-7列,其中一列是
成员
,其中包括不同的
索引
值,这些值由空格分隔,例如:

成员
1 3 5 7
3 7
6 9 2

我试图做的是通过匹配数据框
genes
中的
index
列,将索引替换为
Names
。如果在
基因
上找不到索引,我只想把
NA
放在它的位置上

因此,根据示例,我希望的输出是:

成员
A C NA NA
卡纳

NA NA B

我们可以使用
chartr
gsub

df2$Members <- gsub("\\d+", "NA", chartr(paste(df1$Index, collapse=""), 
                   paste(df1$Name, collapse=""), df2$Members))

df2
#    Members
#1 A C NA NA
#2      C NA
#3   NA NA B
数据
我道歉。下次我会尽力去做的。谢谢你好谢谢你的回复。我尝试了你的两种解决方案。在使用完整数据中的第一个时,我得到了以下错误:
chartr中的错误(粘贴(df1$Index,collapse=”“)、粘贴(df1$Name,collapse=“”),:“old”比“new”长。
。但是,使用第二种方法,我遇到了这个错误:
strsplit中的错误(df2$Members,“\\s+”):非字符参数
。因此,我将
成员
列从数据框中分离出来,并将其作为.character读取。现在它可以工作了。你能解释一下为什么我会出现这些错误吗?@RasifAjwad关于第一个错误,我只是使用了你的示例。如果你使用了我在帖子中显示的“数据”,它就会工作。关于第二个错误,它也适用于我的数据,因为我的“成员”是
character
类而不是
factor
。请将代码更改为
strsplit(as.character(df2$Members),“\\s+”)
原因是
strsplit
没有选择
因子的选项是的,我已经修复了它。但是仍然不明白为什么第一个解决方案不起作用。会让你知道我是否能够修复这个问题。非常感谢!@RasifAjwad你能试试
as.character(df1$Index)
在该解决方案中?是否只有示例中描述的单个字符串?
df2$Members <- sapply(strsplit(df2$Members, "\\s+"), function(x) 
                  paste(setNames(df1$Name, df1$Index)[x], collapse=" "))
df1 <- structure(list(Index = 1:4, Name = c("A", "B", "C", "D")), .Names = c("Index", 
"Name"), class = "data.frame", row.names = c(NA, -4L))

df2 <-structure(list(Members = c("1 3 5 7", "3 7", "6 9 2")),
  .Names = "Members", class = "data.frame", row.names = c(NA, -3L))