在R语言中拆分同一列内的经纬度坐标数据
问题分析与解决方案
原代码错误原因
parse_number()仅能提取字符串中的第一个数值,因此number列只获取了经度数据,纬度数据直接被丢弃,后续自然无法截取到纬度。- 对数值类型使用
str_sub()属于逻辑错误:str_sub是字符串处理函数,即便将数值转为字符串,也不存在纬度部分的数据。
正确解决方案
方案1:使用tidyr::separate分割列(推荐)
这是最直接的方法,利用separate按空格分割Store Location列,自动转换为数值类型:
library(tidyverse) liquor2 %>% separate(`Store Location`, into = c("long", "lat"), sep = " ", convert = TRUE)
sep = " ":按空格作为分隔符convert = TRUE:自动将分割后的字符串转为数值类型,NA值会被保留
方案2:正则表达式提取
通过正则分别匹配经度和纬度:
library(tidyverse) liquor2 %>% mutate( # 提取开头的经度(含负号、小数) long = as.numeric(str_extract(`Store Location`, "^\\s*-?\\d+\\.\\d+")), # 提取空格后的纬度 lat = as.numeric(str_extract(`Store Location`, "(?<=\\s)\\d+\\.\\d+")) )
内容的提问来源于stack exchange,提问作者Miguel Angel Acosta Chinchilla
相关产品推荐
相关产品推荐

