R语言中移除数据框列名非末尾数字前的下划线
解决DataFrame列名移除非末尾数字前下划线的问题
你可以用正则表达式的负向预查实现这个需求,核心思路是只保留那些紧跟在末尾数字序列之前的下划线,其余下划线全部移除。
正则表达式说明
使用模式 _(?!\d+$):
_:匹配目标下划线(?!\d+$):负向预查,确保下划线后面不是一串数字直接结束整个字符串。这样就只会放过最后一个下划线(因为它后面是数字+字符串结尾),其他下划线都会被匹配并替换。
Python pandas 实现示例
import pandas as pd # 构造示例数据框 cols = ["learn_anx_1", "learn_anx_2", "learn_anx_3", "job_anx_1", "job_anx_2", "Beh_Int2_1", "Beh_Int2_2", "anxty1_1", "anxty1_2"] df = pd.DataFrame(columns=cols) # 修改列名 df.columns = df.columns.str.replace(r'_(?!\d+$)', '', regex=True) # 验证结果 print(df.columns.tolist()) # 输出:['learnanx_1', 'learnanx_2', 'learnanx_3', 'jobanx_1', 'jobanx_2', 'BehInt2_1', 'BehInt2_2', 'anxty1_1', 'anxty1_2']
R 语言实现示例
如果你用R处理数据框,可用gsub结合Perl风格正则:
cols <- c("learn_anx_1", "learn_anx_2", "learn_anx_3", "job_anx_1", "job_anx_2", "Beh_Int2_1", "Beh_Int2_2", "anxty1_1", "anxty1_2") new_cols <- gsub("_(?!\\d+$)", "", cols, perl = TRUE) # 结果与预期一致
这个方案能兼容末尾多位数字的情况(比如xxx_123),也不会误改仅含末尾数字前下划线的列名(像anxty1_1这类)。
内容的提问来源于stack exchange,提问作者Ane
相关产品推荐
相关产品推荐

