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