也许有点愚蠢的问题,但我无法解决我的问题。我有一个包含一些代码的表,其中一些行包含几个用空格分隔的代码:
| 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
发布于 2017-07-10 18:05:16
你的数据:
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 AAhttps://stackoverflow.com/questions/45017984
复制相似问题