合并小表后如何保留DataFrame原始列名(去除.x/.y类后缀)
解决合并DataFrame后列名带.x/.y后缀的问题
要统一将带.x、.y、.x.x、.y.y这类后缀的列名还原为原始名称,只需用正则表达式批量替换列名即可,具体实现如下:
# 原始数据(R会自动处理重复列名,添加序号后缀) data <- data.frame(part=c("DD","MM","TT"), Team1 = c("kamal", "vimal", "shamal"), "names.x" = c(45,23,35), Team2 = c("kamal", "vimal", "shamal"), "names.y" = c(46,24,36), Team3 = c("kamal", "vimal", "shamal"), "names.x.x" = c(47,25,37), Team2 = c("kamal", "vimal", "shamal"), "names.y.y" = c(48,26,38), age = c(45,23,35), weight = c(50,34,42)) # 批量去除列名中所有以.开头的后缀 colnames(data) <- gsub("\\..*", "", colnames(data)) # 查看修改后的列名 colnames(data) # 输出结果:"part" "Team1" "names" "Team2" "names" "Team3" "names" "Team2" "names" "age" "weight"
代码说明
gsub("\\..*", "", colnames(data)) 的作用是:
\\.匹配列名中的点号(需转义,因为.在正则表达式中是通配符).*匹配点号后面的任意字符(包括多个点号和后续内容)- 整体效果是清空列名中第一个点号及其后面的所有内容,只保留原始列名前缀
执行后,所有names.x、names.y、names.x.x、names.y.y都会被统一改为names,其他列名(如part、age、weight)保持不变。
内容的提问来源于stack exchange,提问作者samrr_tr
相关产品推荐
相关产品推荐

