在 R 中,我想根据两个数据帧中其他三列中的值在一个数据帧中的一列中插入值

问题描述 投票:0回答:1

我正在使用两个数据框,每个数据框都有多个列。一个称为“犯罪”的数据框包含有关美国各地犯罪的数据。一个变量是“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) 中的错误:水平集 因素不同

任何帮助将不胜感激。

r if-statement mutate
1个回答
0
投票

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
等)的帮助以了解详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.