在两个数据帧中基于三个匹配ID查找值--R
我有两个数据框,我想沿着三列进行匹配,以在下面输入一个“年金因子”值。我试图用下面一个有点重复性的例子来说明这一点。我使用了一个left_连接,如下所示,但是在完整的数据集中,它复制了数据中的每一行。然而,它确实引入了正确的年金系数。我不确定是什么原因造成的,或者是否有更好的选择在两个数据帧中基于三个匹配ID查找值--R,r,R,我有两个数据框,我想沿着三列进行匹配,以在下面输入一个“年金因子”值。我试图用下面一个有点重复性的例子来说明这一点。我使用了一个left_连接,如下所示,但是在完整的数据集中,它复制了数据中的每一行。然而,它确实引入了正确的年金系数。我不确定是什么原因造成的,或者是否有更好的选择 df <- structure(list(TRYear = c(2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2
df <- structure(list(TRYear = c(2020, 2020, 2020, 2020,
2020, 2020, 2020, 2020, 2020, 2020),
DiscountRate = c(1.0001, 3.0000, 3.0000, 5.0000, 7.0000, 8.0000, 10.0000, 9.0000, 4.0000, 2.0000),
TRA = c(65L, 65L, 65L, 65L,65L, 65L, 65L, 65L, 65L, 65L),
Gender = c("F", "F", "M", "F", "F", "M","F", "F", "M","M")), class = "data.frame", row.names = c(NA, -10L))
df2<-structure(list(TargetRetireYear = c(2020, 2020, 2025, 2025,2030, 2030, 2035, 2035, 2040, 2040),
DiscountRate = c(1.0001, 3.0000, 3.0000, 5.0000, 7.0000, 8.0000, 10.0000, 9.0000, 4.0000, 2.0000),
Age = c(65L, 65L, 57L, 58L,59L, 60L, 61L, 62L, 63L, 64L), variable = c("M", "F", "M", "F", "M", "F","M", "F", "M","F")), class = "data.frame",
row.names = c(NA, -10L),AnnuityFactor = c(12.0001, 13.0000, 13.0000, 15.0000, 16.0000, 18.0000, 10.0000, 9.0000, 14.0000, 20.0000))
left_join(df,df2, by = c("DiscountRate" = "DiscountRate", "TRYear" = "TargetRetireYear","TRA" = 'Age', "Gender" = 'variable'))
df某些行可能有重复项,这导致它在最终数据集中重复。在执行联接之前,尝试使用distinct
在每个数据集中仅保留唯一的行
library(dplyr)
df %>%
distinct() %>%
left_join(df2 %>% distinct(),
by = c("DiscountRate" = "DiscountRate", "TRYear" = "TargetRetireYear",
"TRA" = 'Age', "Gender" = 'variable'))
某些行可能有重复项,这导致它在最终数据集中重复。在执行联接之前,尝试使用distinct
在每个数据集中仅保留唯一的行
library(dplyr)
df %>%
distinct() %>%
left_join(df2 %>% distinct(),
by = c("DiscountRate" = "DiscountRate", "TRYear" = "TargetRetireYear",
"TRA" = 'Age', "Gender" = 'variable'))
康纳
使用left_join
,整个df
数据帧将保持与主数据帧相同的状态,并且仅当df
和df2
的三列匹配时,根据left_join
函数的by
参数,只有这样,才会从df2
数据帧返回AnnuityFactor
记录。如果这就是您想要的,那么您似乎已经通过使用左连接正确设置了连接,这是连接两个数据帧的好方法。Connor
使用left_join
,整个df
数据帧将保持与主数据帧相同的状态,并且仅当df
和df2
的三列匹配时,根据left_join
函数的by
参数,只有这样,才会从df2
数据帧返回AnnuityFactor
记录。如果这就是您要做的,那么您似乎已经通过使用左连接正确设置了连接,这是连接两个数据帧的好方法。奇怪的是,即使在这之后,我仍然会得到一些额外的行。我的数据集有630600行,我从中提取的数据集有504000行,但我最终得到671464行。我想不出一个办法来保持630600划艇的速度……真奇怪。你能在更小的数据子集上重现这个吗?这样做也会让你清楚问题所在。奇怪的是,即使在这之后,我仍然会得到一些额外的行。我的数据集有630600行,我从中提取的数据集有504000行,但我最终得到671464行。我想不出一个办法来保持630600划艇的速度……真奇怪。你能在更小的数据子集上重现这个吗?这样做也会让你清楚问题所在。