R语言sf包替换特定几何对象失败问题求助
替换sf对象错误坐标的解决方案
报错根源
你写的代码里,新创建的点要素没有设置和原数据一致的坐标系(CRS),导致case_when无法合并属性不匹配的空间对象,才抛出了属性兼容错误。
可行解决方法
方法1:给新点指定匹配的CRS
在创建新点的sfc对象时,直接指定和原数据相同的CRS,这样case_when就能正常合并:
library(sf) library(dplyr) df <- data.frame( name = c("Point A", "Point B", "Point C"), lon = c(-71.5429688, -75.234375, -63.1054688), lat = c(-33.1375512, -13.7527247, 5.6159858) ) sf <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) sf %>% mutate( geometry = case_when( name == "Point A" ~ st_sfc(st_point(c(5, 6)), crs = st_crs(geometry)), TRUE ~ geometry ) )
方法2:直接定位修改目标行
跳过case_when,直接定位到需要修改的行替换geometry,写法更简单:
sf[sf$name == "Point A", "geometry"] <- st_sfc(st_point(c(5,6)), crs = st_crs(sf))
方法3:用replace函数批量替换
结合replace函数精准替换指定条件的元素:
sf %>% mutate(geometry = replace(geometry, name == "Point A", st_sfc(st_point(c(5,6)), crs = st_crs(.))))
内容的提问来源于stack exchange,提问作者TDP
相关产品推荐
相关产品推荐

