在R语言中如何基于两列数值新增符合自定义格式的ID列
R数据表新增指定格式ID列操作方案
以下提供base R、tidyverse(dplyr)两种主流实现方式,支持你需要的3种拼接格式,可按需选择。
基础说明
- 示例数据表统一命名为
dt,第1列、第2列可按索引直接调用,也可替换为你实际使用的列名 - 若你仅需要为第1列取值为3、第2列取值为5的行赋值ID,其余行留空,可直接参考最后的条件赋值方案
方案1:base R原生实现
格式1:短横线连接(输出为3-5格式)
# 全表所有行统一生成ID dt$ID <- paste(dt[,1], dt[,2], sep = "-")
格式2:点连接(输出为3.5格式)
# 生成字符类型ID dt$ID <- paste(dt[,1], dt[,2], sep = ".") # 若需要数值类型可额外转换 dt$ID <- as.numeric(paste(dt[,1], dt[,2], sep = "."))
格式3:斜杠连接(输出为3/5格式)
dt$ID <- paste(dt[,1], dt[,2], sep = "/")
方案2:dplyr管道实现(tidyverse生态常用)
使用前需先加载dplyr包:library(dplyr)
格式1:短横线连接
dt <- dt %>% mutate(ID = paste(.[,1], .[,2], sep = "-")) # 若明确列名为col1、col2也可直接写为: # mutate(ID = paste(col1, col2, sep = "-"))
格式2:点连接
dt <- dt %>% mutate(ID = paste(.[,1], .[,2], sep = "."))
格式3:斜杠连接
dt <- dt %>% mutate(ID = paste(.[,1], .[,2], sep = "/"))
仅满足条件的行赋值方案
如果仅需要为第1列=3且第2列=5的行赋值,其余行保留空值/原值,可按如下方式实现:
base R实现(以短横线格式为例)
# 先初始化ID列为空 dt$ID <- NA_character_ # 仅给满足条件的行赋值 target_rows <- dt[,1] == 3 & dt[,2] == 5 dt$ID[target_rows] <- paste(dt[target_rows,1], dt[target_rows,2], sep = "-")
dplyr实现(以短横线格式为例)
dt <- dt %>% mutate(ID = case_when( .[,1] == 3 & .[,2] ==5 ~ paste(.[,1], .[,2], sep = "-"), TRUE ~ NA_character_ ))
内容的提问来源于stack exchange,提问作者biology2021
相关产品推荐
相关产品推荐

