如何在R语言中提取数据框字符型年份列的最值及年份数量?
处理字符型年份列:提取最小值、最大值及年份数量
给定如下R数据框,其中yr列是以逗号分隔的字符型年份数据,需要为每行计算年份的最小值(min_yr)、最大值(max_yr)以及年份的数量(nYears):
df <- data.frame(id = 1:4, yr = c("1543,860,2023", "2019,2018,2006,2007", "1998,2012,2000,2020", "2000"))
方法一:使用tidyverse工具链
library(tidyverse) df_result <- df %>% mutate(yr_list = str_split(yr, ","), yr_numeric = map(yr_list, as.numeric), min_yr = map_dbl(yr_numeric, min), max_yr = map_dbl(yr_numeric, max), nYears = map_int(yr_numeric, length)) %>% select(-yr_list, -yr_numeric) print(df_result)
方法二:使用基础R实现
df_result <- df df_result$yr_list <- strsplit(df_result$yr, ",") df_result$yr_numeric <- lapply(df_result$yr_list, as.numeric) df_result$min_yr <- sapply(df_result$yr_numeric, min) df_result$max_yr <- sapply(df_result$yr_numeric, max) df_result$nYears <- sapply(df_result$yr_numeric, length) df_result <- df_result[, !names(df_result) %in% c("yr_list", "yr_numeric")] print(df_result)
两种方法都会得到如下结果:
id yr min_yr max_yr nYears 1 1543,860,2023 860 2023 3 2 2019,2018,2006,2007 2006 2019 4 3 1998,2012,2000,2020 1998 2020 4 4 2000 2000 2000 1
内容的提问来源于stack exchange,提问作者iGada
相关产品推荐
相关产品推荐

