首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于另一个dataframe从一个列中替换多个值

基于另一个dataframe从一个列中替换多个值
EN

Stack Overflow用户
提问于 2017-01-31 22:43:50
回答 1查看 354关注 0票数 1

这里有个新手。我有一个dataframe genes,它包含两列:IndexName,例如:

Index Name 1 A 2 B 3 C 4 D

另一个dataframe similarity包含6-7列,其中一个列是Members,它包含由空格分隔的不同Index值,如:

Members 1 3 5 7 3 7 6 9 2

我想要做的是通过匹配dataframe Names中的index列来替换索引到genes。如果在genes上找不到索引,我只想把NA放在它的位置上。

因此,根据这个例子,我想要的输出是:

Members A C NA NA C NA NA NA B

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 03:26:03

我们可以用chartrgsub来实现这一点。

代码语言:javascript
复制
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 'Members‘列,然后根据第一个数据集中的键/值对('df1')进行匹配。

代码语言:javascript
复制
df2$Members <- sapply(strsplit(df2$Members, "\\s+"), function(x) 
                  paste(setNames(df1$Name, df1$Index)[x], collapse=" "))

数据

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41968867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档