R语言如何对逗号分隔的字符列值升序排序后仅保留第一个值
R 字符型ID列处理:逗号分隔值排序后取首个元素
你可以使用tidyverse套件或base R两种方案完成需求,代码如下:
步骤1:构造示例数据(可跳过,直接替换为你自己的df即可)
df <- data.frame( ID = c("2", NA, "1", "3", "4", "5,7", "9,6,10", "12", "15", "16", "17", NA, "19", "22,23"), stringsAsFactors = FALSE )
方案1:tidyverse 解法(代码可读性更高)
library(tidyverse) df_processed <- df %>% mutate( ID = map_chr(ID, function(x) { if (is.na(x)) return(NA_character_) str_split(x, ",")[[1]] %>% as.integer() %>% sort() %>% head(1) %>% as.character() }) )
方案2:base R 解法(无需额外安装依赖包)
df$ID <- sapply(df$ID, function(x) { if (is.na(x)) return(NA) num_vec <- as.integer(unlist(strsplit(x, ","))) as.character(sort(num_vec)[1]) })
处理逻辑说明
- 逐行遍历ID列的每个值,NA值直接保留不处理
- 非NA值按逗号拆分后转换为整数,做升序排序
- 提取排序后的第一个值,默认返回字符型,如果你需要数值型结果,将代码最后的
as.character()替换为as.integer()即可
内容的提问来源于stack exchange,提问作者Dinho
相关产品推荐
相关产品推荐

