我有两个数据帧,它们都共享一个公共ID变量。然而,一个人有超过1000个观察值,而另一个有大约100个观察值。下面是他们看起来像的一个例子。如何合并两个不同大小的数据帧而不重复较小数据帧的情况,R
df1 = data.frame(Id = c(1,1,1,2,2,2,3,3,3), Type1 =
c(1,NA,NA,2,NA,NA,4,NA,NA), Type2= c(1,NA,NA,2,NA,NA,4,NA,NA))
#df1
# Id Type1 Type2
# 1 1 1
# 1 NA NA
# 1 NA NA
# 2 2 2
# 2 NA NA
# 2 NA NA
# 3 4 4
# 3 NA NA
# 3 NA NA
df2 = data.frame(Id = c(1,2,3), Othertypes = c(5,4,6))
#df2
# Id Othertypes
# 1 5
# 2 4
# 3 6
当合并,案件在df12$Othertypes
从更短的数据帧(DF2)被重复,因为这样:
df12 <- merge(df1,df2, by ="Id")
#df12
# Id Type1 Type2 Othertypes
# 1 1 1 5
# 1 NA NA 5
# 1 NA NA 5
# 2 2 2 4
# 2 NA NA 4
# 2 NA NA 4
# 3 4 4 6
# 3 NA NA 6
# 3 NA NA 6
不过,我真正想要的是每个ID 1 “Othertypes” 的情况下,作为这样的:
#df12
# Id Type1 Type2 Othertypes
# 1 1 1 5
# 1 NA NA NA
# 1 NA NA NA
# 2 2 2 4
# 2 NA NA NA
# 2 NA NA NA
# 3 4 4 6
# 3 NA NA NA
# 3 NA NA NA
我曾尝试以下办法:
temp <- merge(df1,df2, by="Id",sort=FALSE)
temp2 <- left_join(df1, df2, by = "Id")
以及data.table
(非常失败)以及功能使用plyr
(也不成功)。
这不起作用,因为所有ID必须具有“Othertypes”的值。在这种情况下,Ids 1-9没有任何价值。 –