通过匹配一行中的值进行多次替换

时间:2017-07-10 17:11:38

标签: r dataframe matching

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

| Codes       |
|-------------|
| 12.12       |
| 12.12 12.13 |
| 12.11 12.13 |
| 12.10       | 

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

| Code  | Value |
|-------|-------|
| 12.10 | AA    |
| 12.11 | BB    |
| 12.12 | CC    |
| 12.13 | DD    |

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

| Codes |
|-------|
| CC    |
| CC,DD |
| BB,DD |
| AA    |

我试图达到这样的结果:

dataframe1$Codes <- dataframe2$values[match(unlist(strsplit(dataframe1 $Codes)) ,dataframe2$Code)]
但我收到错误:替换有X行,数据有Y

1 个答案:

答案 0 :(得分:2)

您的数据:

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

library(dplyr)
library(iterators)

Codes中制作df的嵌套列表:

temp <- lapply(iter(df,by="row"),function(x) unlist(strsplit(x," ")))

df$Codesvals$Code匹配,抓取已配对的vals$Valuepaste并转换为数据框:

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

输出

  Codes
1    CC
2 CC,DD
3 BB,DD
4    AA