R中经IFELSE判断后sf point自动转列表,如何恢复为sfc_POINT类型?
核心原因
R基础包的ifelse函数针对普通向量设计,不会保留sfc几何列的特殊类属性,执行后会强制将几何列降级为普通list类型,属于函数设计的正常表现,并非sf包bug。
已转成list的列恢复为sfc几何类型的方法
直接调用sf包的st_as_sfc()函数即可还原几何列的原有属性:
DT$geometry <- st_as_sfc(DT$geometry) # 验证类属性 class(DT$geometry) # 输出为 "sfc_POINT" "sfc"
最优实现方案(从根源避免类型转换问题)
无需使用ifelse,直接按条件索引赋值即可,全程保留sfc类属性:
基础R实现
DT$geometry[DT$originDestinType == 1] <- NA
dplyr风格实现
DT <- DT %>% mutate(geometry = replace(geometry, originDestinType == 1, NA))
以上两种写法都不会改变geometry列的原始类,赋值后的空值会自动转为sf标准的空几何对象,完全不影响后续sf相关操作。
内容的提问来源于stack exchange,提问作者Jingjun
相关产品推荐
相关产品推荐

