genes
包含两列:Index
和Name
,例如:
Index Name
1 A
2 B
3 C
4 D
另一个数据框similarity
包含6-7列,其中一列为Members
,其中包含由空格分隔的不同Index
值,例如:
Members
1 3 5 7
3 7
6 9 2
我要做的是通过匹配数据框Names
中的index
列,将索引替换为genes
。如果在genes
上找不到索引,我只想将NA
置于其位置。
因此,根据这个例子,我想要的输出是:
Members
A C NA NA
C NA
NA NA B
。
答案 0 :(得分:1)
我们可以使用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
或者另一种方法是split
'成员'列,然后根据第一个数据集('df1')中的键/值对进行匹配
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))