我正在R
使用常规数据框 ( df
) 和 shapefile ( map2
),它们共享一个名为CD116FP
. df
有 103552 行,而map2
有 444 行。我正在通过以下方式加载 shapefile:
map2 <- read_sf("D:/Data/tl_2019_us_cd116.shp")
我的最终目标是使用该功能mapview()
来查看包含在列下map2
描述的“强度”的地图。因此,我不希望观察结果不会出现在.df
np_scores
df
map2
以下是我的想法和失败:
如果这两个对象是常规数据帧,一个合理的候选者将
merge()
用于组合这两个对象,但是如果在这种情况下应用该函数,则生成的对象会失去空间属性并且mapview
不知道如何读取它。我使用的另一种方法是尝试这行代码:
map2m<-data.frame(map2, df[匹配(map2$CD116FP, df$CD116FP),])
但是结果的尺寸太大(比 444 行大得多),因此mapview
在尝试绘制所需的地图时会崩溃。
- 最后,我全力以赴,只是构建了一个循环来将列添加
np
到map2
:
map2$np=10
for (i in c(1:nrow(map2)))
{
for (j in c(1:nrow(df)))
{
if (identical(map2$CD116FP[i],df$CD116FP[j]))
{map2$np[i]=df$np_score[j]}
else {map2$np[i]=0}
}
}
但是,考虑到我的数据框的尺寸,这种方法只需要太多时间。
你有什么建议吗?