在r中,基于具有多个潜在匹配变量的查找表在数据帧中创建一个新变量

在r中,基于具有多个潜在匹配变量的查找表在数据帧中创建一个新变量,r,lookup,matching,R,Lookup,Matching,我想根据查找表中的匹配项,向datasetANES添加一个新变量cnty。我已经在这里阅读了一些相关的问题,并对它们进行了调整,但没有成功 我有一个跨越多年的调查数据集。在不同的时间段,调查使用不同的代码来确定采访的县。与county相关的变量以不同的方式命名a1a2bc和fips。fips编号是我想传递给anes$cnty的编号。有些观测记录包含上述变量中的一个,有些则包含多个。有些没有,将导致NA。有45000多个OB和许多变量,但简略表如下所示: ##ANES # year

我想根据查找表中的匹配项,向dataset
ANES
添加一个新变量
cnty
。我已经在这里阅读了一些相关的问题,并对它们进行了调整,但没有成功

我有一个跨越多年的调查数据集。在不同的时间段,调查使用不同的代码来确定采访的县。与county相关的变量以不同的方式命名
a1
a2
b
c
fips
fips
编号是我想传递给
anes$cnty
的编号。有些观测记录包含上述变量中的一个,有些则包含多个。有些没有,将导致
NA
。有45000多个OB和许多变量,但简略表如下所示:

    ##ANES
    # year   female   educ  marital  partyID  a1    a2   b     c     fips
    # 1958   1        4     1        R        241   NA   NA    NA      NA
    # 1958   0        2     1        R         41   NA   NA    NA      NA
    # 1964   1        1     0        D        NA    NA   571   NA      NA
    # 1968   0        3     1        D        NA    NA   13    71041   NA
    # 1968   0        4     0        D        NA    NA   721   31007   NA
    # 1994   1        1     1        R        NA    NA   NA     NA    13089
我还有一个包含216个县的查找表df。它将
a1、a2、b、c和fips
与县名匹配

    # LOOKUP
    #  a1     a2     b      c      fips  
    #  241    41    131   23082    26163
    #  981     NA   571   54041    47081
    #  NA      NA     13   71041    06081
    #  451     NA     721   31007   19013
    #  NA      NA     374    44044   13089
我感兴趣的是fips——查找中的每个观察都有一个fips。我正在寻找将创建
anes$cnty
变量并基于anes行具有的任何变量
(a1、a2、b、c、fips)
fips
从查找传递到
cnty
的代码

预期结果:

##ANES
    # year   female   educ  marital  partyID  cnty
    # 1958   1        4     1        R        26163
    # 1958   0        2     1        R        26163
    # 1964   1        1     0        D        47081
    # 1968   0        3     1        D        06081        
    # 1968   0        4     0        D        19013
    # 1994   1        1     1        R        13089
如有任何建议,将不胜感激

如前所述,我根据相关问题的建议进行了多次尝试,但我没有取得任何进展。我最近的尝试:

    anes$cnty <- ifelse(is.na(anes$a2),  as.character(lookup[match(anes$a2, lookup$a2), 'fips']), 
                        ifelse(is.na(anes$a1), as.character(lookup[match(anes$a1, lookup$a1), 'fips']),
                               ifelse(is.na(anes$b), as.character(lookup[match(anes$b, lookup$b), 'fips']),
                                      ifelse(is.na(anes$c), as.character(lookup[match(anes$c, lookup$c), 'fips']), 
                                             ifelse(is.na(anes$fips), as.character(lookup[match(anes$fips, lookup$fips), 'fips']), anes$cnty )))))

anes$cnty您能否编辑您的示例,使您共享的查找行与您共享的anes行相对应?匹配顺序是否重要?也就是说,有没有可能一个ANES行将匹配上的查找,比如说
b
,但它在
a1
上有不同的匹配?如果没有优先级问题,我认为您应该能够将ANES内部连接到每个变量上进行查找,合并结果,并消除重复。@Gregor,是的,我将处理该编辑。是的,一个给定的ANES行可能有一个变量a1和另一个变量,比如c,它们都对应于相同的县FIP。有时没有匹配的键(那年没有记录),有时一个键匹配,有时多个键匹配。我会尝试内部连接并报告。好的,很好。我想问的是,在某个ANES行中,
a1
值是否可能匹配查找中的一个FIPS代码,而
c
值匹配不同的FIPS代码,需要优先级顺序(可能
a1
c
更匹配)。但听起来情况并非如此