我有两张桌子;“参考”和“表A”。
我正在查看 TableA 这是一个不完整的表,并希望通过引用“参考”表、填充缺失值和/或添加找到多个匹配项的行来将其变成一个“完整”表。
“Reference”和“TableA”的可重现示例如下:
A <- c(1,1,1,2,4,4,5,5,7,6,2,1)
B <- c(1,2,2,2,4,4,9,5,8,6,2,9)
C <- c(1,1,3,3,4,5,5,5,7,6,3,3)
D <- c(1,2,1,1,2,1,2,1,2,2,2,1)
Reference <- data.frame(A,B,C,D)
A <- c(NA,1,5,2,4,1)
B <- c(NA,2,NA,2,NA,1)
C <- c(3,NA,5,NA,NA,1)
D <- c(1,1,2,2,1,1)
TableA <- data.frame(A,B,C,D)
我试图通过执行以下操作来解决此问题:
for (i in 1:dim(TableA)[1])
{
tmp<-TableA[i,]
repet<-ifelse(is.na(TableA$D[i]), Reference, 1 )
for (j in 1:repet) {
tmp$D<-ifelse(repet>1, Reference$D[j,], tmp$D)
collector<-rbind(collector, tmp)
}
}
collector
但是,此解决方案将返回整个 Reference$D,但我只想从 Reference$D 返回那些 A、B、C 列与 TableA 上的内容匹配(或部分匹配)的记录。
例如,在 TableA 的第 1 行中,我想将第 1 行替换为参考表的第 3、4 和 12 行。
预期输出如下。
请注意,参考表组合 1、2、3、1 在预期输出中出现两次,因为它与 TableA 的第 1 行和第 2 行都匹配。
一个 | 乙 | C | D |
---|---|---|---|
1 | 2 | 3 | 1 |
2 | 2 | 3 | 1 |
1 | 9 | 3 | 1 |
1 | 2 | 3 | 1 |
5 | 9 | 5 | 2 |
2 | 2 | 3 | 2 |
4 | 4 | 5 | 1 |
1 | 1 | 1 | 1 |