我有两个数据表,比方说DT1和DT2:
> head(DT1)
Tienda Codigo
1: Abasto 8519202
2: Abasto 8610301
3: Abasto 8908001
4: Abasto 8911602
5: Abasto 8948801
6: Abasto 41004301
> head(DT2)
Tienda Codigo SemanaIntro
1: Abasto 43055201 30
2: Abasto 43055202 30
3: Abasto 43055203 30
4: Abasto 8785701 38
5: Abasto 41013401 38
6: Abasto 41129602 39
与同一个班级:
> class(DT1$Tienda)
[1] "factor"
> class(DT2$Tienda)
[1] "factor"
> class(DT1$Codigo)
[1] "integer"
> class(DT2$Codigo)
[1] "integer"
我想进行合并,有些行匹配,有些行不匹配
> DT3 <- merge(DT1,DT2,by = c("Tienda","Codigo"), all.x = T)
Tienda Codigo SemanaIntro
1: Abasto 0 NA
2: Abasto 0 NA
3: Abasto 733501 NA
4: Abasto 733501 NA
5: Abasto 733501 NA
6: Abasto 845402 NA
SemanaIntro列的每一行都是NA,它们存在于两个数据表中。 DT2中没有重复的行。 DT1有35M观测值,也许问题与此有关。
有什么想法吗? 谢谢!
编辑: 这是一个例子。
> DT1
Tienda Codigo
1: Abasto 1
2: Abasto 1
3: Abasto 3
4: Zurich 3
5: Zurich 3
6: Zurich 7
> DT2
Tienda Codigo SemanaIntro
1: Abasto 1 1
2: Abasto 2 1
3: Abasto 3 1
4: Zurich 3 2
5: Zurich 5 3
6: Zurich 6 3
> DT3
Tienda Codigo SemanaIntro
1: Abasto 1 1
2: Abasto 1 1
3: Abasto 3 1
4: Zurich 3 2
5: Zurich 3 2
6: Zurich 7 NA
答案 0 :(得分:0)
在这种情况下,我更倾向于使用rbind
函数,因为这不是merge
DT1$SemanaIntro<-NA
DT3<-rbind(DT1, DT2)
编辑:
对不起,我误解了这个问题。如果存在重复的条目,您可能想要尝试left_join
包中的full_join
或dplyr
功能。
library(dplyr)
DT3<-full_join(DT1, DT2, by="Codigo")
答案 1 :(得分:0)
过滤要添加的行后,可以使用rbind.fill(在plyr包中)。
DT1$ID <- paste(DT1$Tienda, DT1$Codigo, sep="_")
DT2$ID <- paste(DT2$Tienda, DT2$Codigo, sep="_")
not.in.TD2 <- ! DT1$ID %in% DT2$ID
require("plyr")
DT3 <- rbind.fill(DT1[not.in.TD2,], DT2)
在这种情况下,您可以避免使用rbind.fill并执行:
DT1$SemanaIntro <- NA
rbind(DT1[not.in.TD2,], DT2)
答案 2 :(得分:0)
解决!非常愚蠢但很难注意到。 DT1 $ Tienda的每一行最后都有一个空格