2014-05-08 37 views
0

發現了有關更改數據框中列名稱的幾個問題,但未回答我遇到的問題。當列名以特定數字結尾時,重命名數據框列

我正在讀取一些excel文件作爲循環中的數據幀,對每個數據幀的數據進行一些分析並移動下一個數據幀。在每個需要重命名名稱以例如00010結尾的列的數據框中,列的位置在每個文件/數據幀中都會改變。

例如進口列名:agency_idsite_nodatetimetz_cd11_0001011_00010_cd12_0003012_00030_md ...

對於我的分析,我需要以下欄目:site_nodatetime11_0001012_00030。我需要將列重命名爲溫度和列,將12_00030重命名爲salinity。如果它們的順序相同,我可以使用rename中的plyrcolnamesnames來輕鬆重命名列。但是,每個數據幀中列的順序或順序不同,包含00010和00030的列可能以不同的數字開頭,因此列名中的00010和00030的位置並不總是固定的。如果是重命名會更容易。另外,我不需要名稱包含00010或00030,但以cd或md結尾的列。

真的很感激任何方法。

回答

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" 
+0

感謝您的快速響應,爲了增加清晰度,我編輯了一些問題,列名11_00010和12_00030可能不是分別以11或12開始,常量邏輯似乎是以00010和00030. – user2653586

+0

我不想保留原始名稱的任何部分。我想重命名爲列,* _00010和* _00030分別爲溫度和鹽度,其中*代表任意數字。 – user2653586

+0

不會有任何重複的列名稱。例如。如果數據框中有30-50列,將只有一列以00010結尾,一列以00030結尾。 – user2653586