繁体   English   中英

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

[英]Replacing multiple values from a column in a dataframe based on another dataframe

这里是新手。 我有一个包含两列的数据框genesIndexName例如:

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

我想要做的是通过匹配数据框genesindex列来将index替换为Names 如果没有在genes找到索引,我只想把NA放在它的位置。

所以,基于这个例子,我想要的输出是:

Members AC NA NA C NA NA NA B .

我们可以用chartrgsub来做到这一点

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM