R语言:如何将含地点与日期的字符列拆分为地点和日期列
解决方法
因为你的字符串始终以「月份 数字.」格式的日期结尾,我们可以用正则表达式精准匹配日期部分,避免丢失月份信息,同时拆分出地点列。
方法1:使用stringr包拆分
library(stringr) locations <- c("Molino November 28.", "Wolf River Bridge December 4.") df <- data.frame(locations) # 提取日期部分(匹配月份+空格+数字+末尾的点,再去掉点) df$Date <- str_remove(str_extract(df$locations, "[A-Z][a-z]+ \\d+\\."), "\\.") # 提取地点部分(去掉日期及前面的空格,再清理多余空格) df$Location <- str_trim(str_remove(df$locations, "[A-Z][a-z]+ \\d+\\.")) # 整理成目标格式 df <- df[, c("Location", "Date")] print(df)
运行后输出:
Location Date 1 Molino November 28 2 Wolf River Bridge December 4
方法2:使用tidyr包的separate函数
如果习惯tidyverse的流程,也可以用separate结合正则分隔符实现:
library(tidyr) library(dplyr) locations <- c("Molino November 28.", "Wolf River Bridge December 4.") df <- data.frame(locations) df <- df %>% separate(locations, into = c("Location", "Date"), sep = "(?=\\b[A-Z][a-z]+ \\d+\\.)", # 正向预查定位日期开头的分隔点 remove = FALSE) %>% mutate(Date = str_remove(Date, "\\."), # 移除日期末尾的点 Location = str_trim(Location)) %>% # 清理地点的多余空格 select(Location, Date) print(df)
原代码的问题
你用str_split_fixed时传入了一个向量作为分隔符,但这个函数要求分隔符是单一字符串,不能和输入长度匹配的向量,因此会报错;另外就算成功拆分,月份会被当作分隔符丢弃,导致日期列缺失月份名称。
内容的提问来源于stack exchange,提问作者jasonh
相关产品推荐
相关产品推荐

