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

如何在R语言中从movies数据框title列提取年份至year列?

嘿,我来帮你搞定这个提取电影年份的需求!处理超1万条数据的话,得用高效又靠谱的方法,下面两种方案都能快速完成任务,你可以根据自己的习惯选:

方案一:用tidyverse(stringr + dplyr)处理

这个方案语法清晰,字符串处理能力强,适合习惯tidy风格的用户。如果还没安装tidyverse,先运行install.packages("tidyverse")安装。

# 加载tidyverse包
library(tidyverse)

# 同时清理title列并提取年份
movies <- movies %>%
  mutate(
    # 提取括号内的4位数字作为年份,转成数值型
    year = as.numeric(str_extract(title, "\\((\\d{4})\\)") %>% str_remove_all("[()]")),
    # 移除title里的"(年份)"部分,\\s*处理标题和括号间可能的空格
    title = str_remove(title, "\\s*\\(\\d{4}\\)")
  )

代码解释:

  • str_extract(title, "\\((\\d{4})\\)"):精准匹配标题里括号包裹的4位数字(也就是年份)
  • str_remove_all("[()]"):把提取到的"(2017)"这类字符串里的括号去掉,得到纯数字
  • str_remove(title, "\\s*\\(\\d{4}\\)"):移除标题末尾的年份部分,\\s*确保即使标题和括号之间有空格也能正确处理(比如"Movie Name (2020)")
方案二:用Base R原生函数处理

如果不想加载额外的包,用Base R的正则函数就能搞定,速度同样高效:

# 提取年份:用sub捕获括号内的4位数字
movies$year <- as.numeric(sub(".*\\((\\d{4})\\).*", "\\1", movies$title))

# 清理title列:移除"(年份)"部分
movies$title <- sub("\\s*\\(\\d{4}\\)", "", movies$title)

代码解释:

  • sub(".*\\((\\d{4})\\).*", "\\1", movies$title):正则表达式里的\\1代表捕获到的第一个分组(也就是括号里的4位数字),直接提取出来作为年份
  • sub("\\s*\\(\\d{4}\\)", "", movies$title):和方案一逻辑一致,移除标题里的年份后缀
额外注意事项

如果你的数据里存在部分没有年份的标题(比如"Unknown Movie"),可以加个判断避免出错:

用tidyverse处理缺失情况:

movies <- movies %>%
  mutate(
    # 先判断标题是否包含标准年份格式
    has_year = str_detect(title, "\\(\\d{4}\\)"),
    # 有年份就提取,没有就设为NA
    year = ifelse(has_year, as.numeric(str_extract(title, "\\((\\d{4})\\)") %>% str_remove_all("[()]")), NA),
    # 有年份就清理标题,没有就保持原样
    title = ifelse(has_year, str_remove(title, "\\s*\\(\\d{4}\\)"), title)
  )

用Base R处理缺失情况:

# 标记有年份的条目
has_year <- grepl("\\(\\d{4}\\)", movies$title)

# 提取年份,无年份的设为NA
movies$year <- NA
movies$year[has_year] <- as.numeric(sub(".*\\((\\d{4})\\).*", "\\1", movies$title[has_year]))

# 清理有年份的标题
movies$title[has_year] <- sub("\\s*\\(\\d{4}\\)", "", movies$title[has_year])

这两种方案处理1万条数据都毫无压力,运行速度很快,你可以放心用!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:16:19