Movielens CSV数据处理:extract拆分标题年份时无年份电影整行NA
解决电影标题与年份拆分时无年份行变NA的问题
我完全懂你的困扰——用extract()拆分时,那些不带年份的电影直接整行变成NA,这确实挺闹心的。问题根源在于extract()的默认规则:它要求正则表达式必须完全匹配整行字符串,如果某行不满足匹配条件,整行就会被替换成NA,而不是只让不匹配的year列显示NA。
修正后的代码
我们只需要调整正则表达式,让年份部分变成可选匹配,同时用非贪婪模式精准捕获标题:
library(tidyr) movies <- extract(movies, title, c("title", "year"), regex = "^(.*?)(?: \\(([0-9\\-]*)\\))?$", convert = TRUE)
代码细节解释
^(.*?):用非贪婪匹配(*?)捕获标题内容,会在遇到第一个(时停止匹配,避免把年份前的空格也误算进标题里。(?: \\(([0-9\\-]*)\\))?:这部分是可选匹配(末尾的?),其中:(?:...)是非捕获组,不会生成多余的列;\\(([0-9\\-]*)\\)专门捕获括号里的年份内容(支持单年份如1994或年份范围如2020-2021);- 末尾的
?表示整个年份模块可以不存在,这样无年份的行也能匹配成功,只会让year列显示NA。
convert = TRUE:自动把year列转换成合适的数据类型(比如整数或字符),省去手动转换的麻烦。
实际效果示例
假设你的原始数据有这样的行:
| title |
|---|
| The Shawshank Redemption (1994) |
| Fight Club |
运行修正后的代码后,结果会变成:
| title | year |
|---|---|
| The Shawshank Redemption | 1994 |
| Fight Club | NA |
这样就不会再出现整行NA的情况啦!
内容的提问来源于stack exchange,提问作者mono1401
相关产品推荐
相关产品推荐

