首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过在一行内匹配值进行多个替换

通过在一行内匹配值进行多个替换
EN

Stack Overflow用户
提问于 2017-07-10 17:11:38
回答 1查看 37关注 0票数 0

也许有点愚蠢的问题,但我无法解决我的问题。我有一个包含一些代码的表,其中一些行包含几个用空格分隔的代码:

代码语言:javascript
复制
| Codes       |
|-------------|
| 12.12       |
| 12.12 12.13 |
| 12.11 12.13 |
| 12.10       | 

我必须将此代码与另一个表中的值匹配。

代码语言:javascript
复制
| Code  | Value |
|-------|-------|
| 12.10 | AA    |
| 12.11 | BB    |
| 12.12 | CC    |
| 12.13 | DD    |

要获得以下结果(所需的分隔符是逗号,但这并不重要):

代码语言:javascript
复制
| Codes |
|-------|
| CC    |
| CC,DD |
| BB,DD |
| AA    |

我曾尝试取得这样的成果:

dataframe1$Codes <- dataframe2$values[match(unlist(strsplit(dataframe1 $Codes)) ,dataframe2$Code)]

但是我得到了错误:替换有X行,数据有Y

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 18:05:16

你的数据:

代码语言:javascript
复制
df <- data.frame(Codes=c("12.12","12.12 12.13","12.11 12.13","12.10"),
                 stringsAsFactors=F)
vals <- data.frame(Code=c("12.10","12.11","12.12","12.13"),
                   Value=c("AA","BB","CC","DD"),
                   stringsAsFactors=F)

我使用dplyriterators

代码语言:javascript
复制
library(dplyr)
library(iterators)

Codes中创建一个嵌套的df列表

代码语言:javascript
复制
temp <- lapply(iter(df,by="row"),function(x) unlist(strsplit(x," ")))

df$Codesvals$Code匹配,获取配对的vals$Valuepaste,并转换为数据帧:

代码语言:javascript
复制
df1 <- lapply(iter(temp),function(x) paste0(vals$Value[vals$Code %in% x],collapse=",")) %>% 
     do.call(rbind,.) %>%
     as.data.frame() %>%
     rename(Codes=V1)

输出

代码语言:javascript
复制
  Codes
1    CC
2 CC,DD
3 BB,DD
4    AA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45017984

复制
相关文章

相似问题

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