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

如何在R语言数据框中基于两列实现最小值函数获取每行最小年份

解决方法

这里有两种实用的方式来实现你要的需求——从每行的两个逗号分隔年份列中提取所有年份,计算最小值并新增为第三列:

方法一:基础R实现

首先先构造你的原始数据框(注意设置stringsAsFactors = FALSE避免字符串被转成因子):

df <- data.frame(
  col1 = c("1990, 1991", "1997, 2004", "2005"),
  col2 = c("1991, 1999", "1994", "1995, 2011"),
  stringsAsFactors = FALSE
)

接下来定义一个处理单行的函数,负责拆分年份、转换类型并计算最小值:

get_min_year <- function(row) {
  # 合并当前行的两列字符串,按", "拆分出所有年份
  all_years <- unlist(strsplit(c(row["col1"], row["col2"]), ", "))
  # 转换为数值型才能进行大小比较
  all_years_num <- as.numeric(all_years)
  # 取最小值后转回字符串,匹配预期格式
  as.character(min(all_years_num))
}

最后用apply按行应用函数,生成第三列:

df$col3 <- apply(df, 1, get_min_year)

# 查看最终结果
print(df)
#          col1         col2 col3
# 1 1990, 1991 1991, 1999 1990
# 2 1997, 2004        1994 1994
# 3        2005 1995, 2011 1995

方法二:tidyverse风格实现

如果你习惯用管道流的方式处理数据,可以用dplyr和tidyr包来实现:

library(dplyr)
library(tidyr)

df_final <- df %>%
  # 将宽表转为长表,把两列的年份字符串统一放到一列
  pivot_longer(everything(), names_to = "column", values_to = "year_str") %>%
  # 把每个单元格的逗号分隔年份拆成单独行
  separate_rows(year_str, sep = ", ") %>%
  # 转换年份为数值型
  mutate(year_num = as.numeric(year_str)) %>%
  # 按原始行分组,计算每组的最小年份并转回字符串
  group_by(row_number()) %>%
  summarise(min_year = as.character(min(year_num))) %>%
  # 将计算结果合并回原始数据框
  bind_cols(df, .) %>%
  # 移除临时的行号列,重命名第三列为col3(可选,按需调整)
  select(col1, col2, col3 = min_year)

print(df_final)

这个方法通过长表转换来拆分年份,分组计算后再合并回原数据,逻辑更直观,适合处理更复杂的表格结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:55:48