在R中使用gsub提取dataframe的ID列纯数字文件ID的问题
问题原因
你使用的[^0-9]正则会匹配移除所有非数字字符,但你的ID列路径中存在BAS1字段,其中的数字1会被保留,和文件名末尾的目标ID拼接后就出现了多余的前导1。
解决方法
推荐使用更精准的提取逻辑,避免路径中其他数字干扰,两种常用实现方式如下:
方法1:base R原生实现(无需额外安装包)
直接提取.txt后缀前的连续数字:
DF$ID <- sub(".*_(\\d+)\\.txt$", "\\1", DF$ID)
方法2:先取文件名再做替换
如果更习惯全局替换的写法,可以先用basename()去掉前缀路径,再清理非数字字符:
DF$ID <- gsub("[^0-9]", "", basename(DF$ID))
处理后的ID列就会完全符合你预期的纯数字效果,输出示例如下:
ID mean median std min max count 1 33714 0.374389 0.374017 0.110854 0.1499130 0.650852 75 2 35377 0.368736 0.353222 0.144632 0.1080110 0.692352 75 3 38623 0.397192 0.390063 0.128366 0.1091700 0.672184 64 4 38806 0.483207 0.494330 0.106284 0.2353770 0.658852 62 5 39593 0.372074 0.323613 0.145565 0.1575710 0.723939 108 6 39820 0.367745 0.344656 0.178729 0.0690003 0.707643 42
内容的提问来源于stack exchange,提问作者CanyonView
相关产品推荐
相关产品推荐

