我正在使用
以下是我的想法和失败经历:
然而,鉴于我的数据框的维度,这种方法需要花费太多时间。你有什么建议吗?
R
,处理一个常规数据框(df
)和一个形状文件(map2
),它们共享一个名为CD116FP
的公共列。其中df
有103552行,而map2
只有444行。我按照以下方式加载形状文件:
我的最终目标是使用函数map2 <- read_sf("D:/Data/tl_2019_us_cd116.shp")
mapview()
查看包含在map2
中的地图,并显示在df
中描述为"强度(intensity)"的内容,在列np_scores
下。因此,我不想在map2
中显示df
中没有出现过的观测值。以下是我的想法和失败经历:
- 如果这两个对象都是常规数据框,合并它们的合理候选方法是使用
merge()
,但是在这种情况下应用该函数会导致结果对象失去空间属性,mapview
不知道如何读取它。 - 我尝试的另一种方法是尝试以下代码行:
但结果的维数太大(比444行要大得多),因此当尝试绘制所需地图时,map2m <- data.frame(map2, df[match(map2$CD116FP, df$CD116FP),])
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}
}
}
然而,鉴于我的数据框的维度,这种方法需要花费太多时间。你有什么建议吗?