如何在R语言dataframe行名中增删指定字符串或数字
R语言DataFrame行名自定义调整方案
R处理数据框时,行名的增删改不需要依赖第三方包,用基础R的字符串处理函数就能完成,以下分两类常见场景给出实现方法。
场景1:删除行名中的冗余字符
先以题述需求为例,原始行名如下:
Patient 01 On Patient 02 PRE Patient 03 Patient 04 PRE
目标是去掉数字前的前导0,同时清除末尾多余空格,得到如下结果:
Patient 1 On Patient 2 PRE Patient 3 Patient 4 PRE
实现步骤
- 先构造测试数据复现场景
# 构造测试数据框 df <- data.frame(val = c(12, 15, 9, 18)) rownames(df) <- c("Patient 01 On", "Patient 02 PRE", "Patient 03 ", "Patient 04 PRE")
- 用正则替换+首尾空格清理完成修改
# 正则匹配「空格+0+单个数字」结构,去掉冗余前导0,再清除首尾多余空格 rownames(df) <- trimws(gsub(pattern = " 0(\\d)", replacement = " \\1", x = rownames(df)))
- 查看处理结果
rownames(df) # [1] "Patient 1 On" "Patient 2 PRE" "Patient 3" "Patient 4 PRE"
其他常见删除需求可以直接调整正则规则实现:
- 删除行尾固定字符:比如要去掉所有行名末尾的
PRE,用gsub("PRE$", "", rownames(df)),$代表匹配字符串末尾位置 - 删除行内固定关键词:比如要删掉所有行名里的
Patient,直接用gsub("Patient ", "", rownames(df))即可
场景2:向行名添加指定字符串/数字
这是删除操作的反向需求,用字符串拼接函数paste0()就能快速实现,常见用法如下:
- 统一添加前缀:比如给所有行名前面加分组标记
GroupA_
rownames(df) <- paste0("GroupA_", rownames(df)) # 处理结果:"GroupA_Patient 1 On" "GroupA_Patient 2 PRE" ...
- 统一添加后缀:比如给所有行名末尾加批次标记
_Batch2024
rownames(df) <- paste0(rownames(df), "_Batch2024") # 处理结果:"Patient 1 On_Batch2024" "Patient 2 PRE_Batch2024" ...
- 按行顺序添加序号:比如给每行按顺序追加
_1、_2格式的序号
rownames(df) <- paste0(rownames(df), "_", seq_along(rownames(df))) # 处理结果:"Patient 1 On_1" "Patient 2 PRE_2" "Patient 3_3" ...
小提示:如果行名存在大量不规则的多余空格,所有操作前可以先用trimws(rownames(df))统一清理首尾空格,能避免大部分正则匹配失效的问题。
内容的提问来源于stack exchange,提问作者maria
相关产品推荐
相关产品推荐

