如何在R语言中清理release_date列多余字符提取年份值?
批量提取release_date列中的年份值
核心思路:直接匹配提取四位数字年份
不管列里的前缀是罗马数字(I)、II)、XVII))还是特殊字符,我们只需要提取其中的四位数字年份即可,比逐个删除无关字符高效得多。
方法1:使用tidyverse的stringr包(推荐,语法更直观)
library(stringr) # 提取列中所有四位数字的年份,生成新列 movie_data$clean_year <- str_extract(movie_data$release_date, "\\d{4}")
\\d{4}是正则表达式,专门匹配连续四位数字,刚好对应年份格式;- 不管原单元格内容是
'XVII) (2016'还是'II. (2020',都能直接提取出'2016'、'2020'; - 如果某些行没有有效年份,结果会是
NA,可以用str_replace_na(clean_year, "未知")替换成默认值。
方法2:使用base R原生函数(无需额外加载包)
如果不想加载stringr,用gsub直接删除所有非数字字符:
# 把所有非数字的字符替换为空,只保留数字 movie_data$clean_year <- gsub("[^0-9]", "", movie_data$release_date)
如果担心单元格里有多个数字串(比如'2016 2017'),可以用更精准的正则只保留第一个四位数字:
movie_data$clean_year <- gsub(".*?(\\d{4}).*", "\\1", movie_data$release_date)
纠正你之前的错误
你之前用gsub("XVII",")",".","", movie_data$year)报错是因为参数顺序完全错了。gsub的正确语法是:gsub(pattern, replacement, x)
你把多个pattern和replacement混在一起传参,R自然无法识别。用上面的正则表达式写法就能一次性处理所有无关字符,不用逐个指定罗马数字或特殊符号。
内容的提问来源于stack exchange,提问作者Teresa Dieter
相关产品推荐
相关产品推荐

