Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两个数据帧中基于三个匹配ID查找值--R_R - Fatal编程技术网

在两个数据帧中基于三个匹配ID查找值--R

在两个数据帧中基于三个匹配ID查找值--R,r,R,我有两个数据框,我想沿着三列进行匹配,以在下面输入一个“年金因子”值。我试图用下面一个有点重复性的例子来说明这一点。我使用了一个left_连接,如下所示,但是在完整的数据集中,它复制了数据中的每一行。然而,它确实引入了正确的年金系数。我不确定是什么原因造成的,或者是否有更好的选择 df <- structure(list(TRYear = c(2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2

我有两个数据框,我想沿着三列进行匹配,以在下面输入一个“年金因子”值。我试图用下面一个有点重复性的例子来说明这一点。我使用了一个left_连接,如下所示,但是在完整的数据集中,它复制了数据中的每一行。然而,它确实引入了正确的年金系数。我不确定是什么原因造成的,或者是否有更好的选择

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划艇的速度……真奇怪。你能在更小的数据子集上重现这个吗?这样做也会让你清楚问题所在。