首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R消除字典中的多个查找

R消除字典中的多个查找
EN

Stack Overflow用户
提问于 2016-05-26 18:07:15
回答 2查看 67关注 0票数 3

我有一个字典(包含2列的表表),其中一些值与某些键匹配。在这些情况下,我希望用它们所指向的键的值替换值。

示例:

代码语言:javascript
复制
Key,   Value
"aa",  "ac"
"ab",  "ba"
"ac",  "ad"
"ad",  "da"
"ae",  "ac"

我想要做的是:

代码语言:javascript
复制
Key,   Value
"aa",  "da"
"ab",  "ba"
"ac",  "da"
"ad",  "da"
"ae",  "da"

我试过的是:

代码语言:javascript
复制
dict <- data.frame(key=c("aa","ab","ac","ad","ae"),value=c("ac","ba","ad","da","ac"))
repeat {
    needs_replacing <- dict[dict$Value %in% dict$Key,]
    if(nrow(needs_replacing) == 0) {
        break;
    }
    replacements <- dict[dict$Key %in% needs_replacing$Value,]
    dict[dict$Value %in% dict$Key,]$Value <- replacements[?????,]$Value
}

我遇到的问题是,replacements在第一次迭代时只有3个值,但我试图将其扩展为替换4个值。我知道你可以用索引来划分它,但是得到它们有点痛苦,我只是不确定是否有更好的方法来完成我想要做的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-26 18:18:20

我们只需要调整循环。在replacements表达式中,match优于%in%,因为它将返回匹配的索引,而后者将返回与位置无关的逻辑:

代码语言:javascript
复制
repeat {
  needs_replacing <- dict$value[dict$value %in% dict$key]
  if(length(needs_replacing) == 0) {
    break;
  }
  replacements <- dict$value[match(needs_replacing, dict$key)]
  dict$value[dict$value %in% dict$key] <- replacements
}
dict
#   key value
# 1  aa    da
# 2  ab    ba
# 3  ac    da
# 4  ad    da
# 5  ae    da
票数 3
EN

Stack Overflow用户

发布于 2016-05-26 18:54:58

我认为这是可行的,它产生了期望的输出。

代码语言:javascript
复制
while(length(dict[dict$Value %in% dict$Key, "Value"]) > 0) {
  dict[dict$Value %in% dict$Key, "Value"] <- 
  dict[match(dict[dict$Value %in% dict$Key, "Value"], dict$Key), "Value"]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37468129

复制
相关文章

相似问题

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