也许有点愚蠢的问题,但我无法解决我的问题。
我有一个包含一些代码的表,其中一些行包含几个用空格分隔的代码:
| 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
答案 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)
我使用dplyr
和iterators
:
library(dplyr)
library(iterators)
在Codes
中制作df
的嵌套列表:
temp <- lapply(iter(df,by="row"),function(x) unlist(strsplit(x," ")))
将df$Codes
与vals$Code
匹配,抓取已配对的vals$Value
和paste
并转换为数据框:
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