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

如何用dplyr提取数据框列表列的首个元素替换原列值?

问题原因

你写的YEARS[[1]][1]是直接取整个YEARS列表列的第一个元素的第一个值(也就是"2020"),dplyr会把这个单一值自动重复填充到每一行,所以所有行的YEARS都变成了2020,没有实现逐行提取每个列表的首个元素。

解决方法

以下是几种基于dplyr生态的实现方式:

方案1:直接拆分时就取第一个元素

可以用str_split_fixed直接返回矩阵,然后提取第一列,不用先生成列表列:

library(dplyr)
library(stringr)

YEARS <- c("2020/2021", "2021/2022", "2022/2023")  
VALUE <- c(10,5,3)  

x <- data.frame(YEARS, VALUE) %>%
  mutate(YEARS = str_split_fixed(YEARS, "/", n=2)[,1])

如果已经生成了列表列,用purrr::map_chr逐行提取第一个元素:

x %>% mutate(YEARS = purrr::map_chr(YEARS, ~ .x[1]))

方案2:正则提取开头的年份

不用拆分,直接用str_extract匹配字符串开头的四位数字:

x %>% mutate(YEARS = str_extract(YEARS, "^\\d{4}"))

方案3:拆分列后保留目标列

如果后续可能用到第二个年份,用tidyr::separate拆分到两列,再选择需要的列:

library(dplyr)
library(tidyr)

x %>% 
  separate(YEARS, into = c("YEAR_START", "YEAR_END"), sep = "/") %>%
  rename(YEARS = YEAR_START) %>% # 重命名回原列名
  select(YEARS, VALUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:20