我正在使用两个数据框,每个数据框都有多个列。一个称为“犯罪”的数据框包含有关美国各地犯罪的数据。一个变量是“V3”,这是为每个报告数据的执法机构提供的代码。另一个数据框称为“crosswalk”,包含许多不同政府数据集中使用的代码数据。它有两个相关代码:“ORI7”,与“V3”相同,“FIPS”是引用美国各个县的代码
“V3”观察结果比“FIPS”代码多得多,因为每个县可能有多个执法机构在其中运作。例如,在伊利诺伊州库克县,只有一个 FIPS 代码(因为只有一个县),但有数十个“ORI7”和“V3”代码,因为库克县有数十个执法机构。
我在“offenses”中创建了一个名为“fips”的列,我想将“crosswalk”数据框中的“FIPS”代码导入到此列中,这样我就有了适当的 ORI7/V3 代码和 fips/FIPS “offenses”数据框中的代码。然后我可以分析县一级的犯罪行为,这就是我的研究目的,而不必重复引用“人行横道”数据框(“人行横道”中的其他内容与我无关)。
我已经做了这些尝试,但当然它们不起作用:
offenses2 <- offenses |>
mutate(fips = ifelse(offenses$V3 == crosswalk$ORI7, crosswalk$FIPS, NA)
offenses$fips[offenses$fips == "TEST"] <- ifelse(offenses$V3 == crosswalk$ORI7, crosswalk$FIPS, NA)
对于后者,我收到此错误消息:
Ops.factor(offenses$V3, crosswalk$ORI7) 中的错误:水平集 因素不同
任何帮助将不胜感激。
merge
是您的朋友,或者,因为您无论如何都在使用dplyr
,所以*_join
功能。例如
offenses2 <-
left_join(offenses,
crosswalk |> select(ORI7, FIPS),
by = c(V3 = "ORI7"))
by
子句指定如何匹配列。在上面 V3
表上的 offenses
语句中(_join
的第一个参数,因此它位于子句的 LHS 上),与 ORI7
表的 crosswalk
列(第二个_join
的参数,因此在 by
子句的 RHS 上)。
我们
select
从 crosswalk
中选择我们想要的列,否则其上的所有其他列都会被合并。您始终需要选择将匹配的列以及要合并的列。
查看
left_join
(以及 full_join
、inner_join
、anti_join
等)的帮助以了解详细信息。