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))