当列名以特定数字结尾时,重命名数据框列

时间:2014-05-08 16:56:14

标签: r dataframe rename

发现有关更改数据框中列名的几个问题,但没有回答我的问题。

我正在读取许多excel文件作为循环中的数据帧,对每个数据帧的数据进行一些分析并移动下一个数据帧。在每个数据框中,我需要重命名名称结尾的列,例如00010.列的位置在每个文件/数据框中都会发生变化。

e.g。导入的列名称包括:agency_idsite_nodatetimetz_cd11_0001011_00010_cd12_00030,{{1 ,},

对于我的分析,我需要以下列:12_00030_mdsite_nodatetime11_00010。我需要将列12_00030重命名为温度和列,将11_00010重命名为盐度。如果它们的顺序相同,我可以使用12_00030renameplyr中的colnames轻松重命名列。但是,每个数据帧中列的顺序或顺序不相同,包含00010和00030的列可能以不同的数字开头,因此列名中的00010和00030的位置并不总是固定的。如果重命名会更容易。另外,我不需要名称中包含00010或00030但以cd或md等结尾的列

真的很感激。

1 个答案:

答案 0 :(得分:1)

为什么不使用gsub

假设" x"作为您的列名(通常通过names(your-data-frame)访问:

x <- c("agency_id", "site_no", "datetime", "tz_cd", "11_00010", 
       "11_00010_cd", "12_00030", "12_00030_md")

x <- gsub("11_00010", "temperature", x)
x <- gsub("12_00030", "salinity", x)
x
# [1] "agency_id"      "site_no"        "datetime"       "tz_cd"         
# [5] "temperature"    "temperature_cd" "salinity"       "salinity_md"

根据您的评论判断,或许您正在寻找更类似的内容:

x <- c("agency_id", "site_no", "datetime", "tz_cd", "11_00010", 
       "11_00010_cd", "12_00030", "12_00030_md")

x[grep("_00010$", x)] <- "temperature"
x[grep("_00030$", x)] <- "salinity"
x
# [1] "agency_id"   "site_no"     "datetime"    "tz_cd"      
# [5] "temperature" "11_00010_cd" "salinity"    "12_00030_md"