【问题标题】:Rename data frame column when column name ends with a specific number当列名以特定数字结尾时重命名数据框列
【发布时间】:2014-05-08 16:56:13
【问题描述】:

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

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

例如导入的列名称为:agency_idsite_nodatetimetz_cd11_0001011_00010_cd12_0003012_00030_md、...

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

真的很感激。

【问题讨论】:

    标签: r dataframe rename


    【解决方案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"
    

    根据您的 cmets 判断,也许您正在寻找类似的东西:

    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"
    

    【讨论】:

    • 感谢您的快速回复。我稍微编辑了我的问题以增加清晰度。列名 11_00010 和 12_00030 不能分别以 11 或 12 开头。不变的逻辑似乎是它们以 00010 和 00030 结尾。
    • 我不想保留原始名称的任何部分。我想将列重命名为 *_00010 和 *_00030 分别为温度和盐度,其中 * 代表任意数字。
    • 不会有任何重复的列名。例如。如果数据框中有 30-50 列,则只有一列以 00010 结尾,一列以 00030 结尾。
    • #Ananda Mahto:你的第二个答案就是我想要的。您如何用 x 替换数据框中的原始列名(在您的第二个答案中)?
    • @user2653586,这已经在我的回答中了。任何你看到“x”的地方都用names(your-data-frame)替换它。
    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 2019-08-25
    • 2020-10-10
    • 2019-12-30
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多