You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

运行修正后的代码后,结果会变成:

titleyear
The Shawshank Redemption1994
Fight ClubNA

这样就不会再出现整行NA的情况啦!

内容的提问来源于stack exchange,提问作者mono1401

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:31:45