[英]Rename multiple dataframe columns, referenced by current names
我想重命名一個大型數據框的隨機列,我想使用當前列名,而不是索引。 如果我向數據添加或刪除列,列索引可能會更改,因此我認為使用現有列名稱是一種更穩定的解決方案。 這就是我現在擁有的:
mydf = merge(df.1, df.2)
colnames(mydf)[which(colnames(mydf) == "MyName.1")] = "MyNewName"
我可以簡化這段代碼,原始的merge()
調用還是第二行? "MyName.1"
實際上是兩個不同xts對象的xts merge
的結果。
更改data.frame
列名的麻煩在於,幾乎令人難以置信的是,復制了整個data.frame
。 即使它在.GlobalEnv
也沒有其他變量指向它。
data.table
包有一個setnames()
函數,它通過引用更改列名而不復制整個數據集。 data.table
的不同之處在於它不是寫入時復制,這對於大型數據集非常重要。 (你的確說你的數據集很大。) 只需提供old
名稱和new
名稱:
require(data.table)
setnames(DT,"MyName.1", "MyNewName")
# or more explicit:
setnames(DT, old = "MyName.1", new = "MyNewName")
?setnames
names(mydf)[names(mydf) == "MyName.1"] = "MyNewName" # 13 characters shorter.
雖然,您可能希望最終替換矢量。 在這種情況下,使用%in%
而不是==
並將MyName.1設置為長度等於MyNewName的向量
plyr
具有重命名功能,僅用於此目的:
library(plyr)
mydf <- rename(mydf, c("MyName.1" = "MyNewName"))
names(mydf) <- sub("MyName\\.1", "MyNewName", names(mydf))
如果你把一個干的使用被替換的模式,這將更好地推廣到多名稱變更策略gsub
,而不是sub
。
您可以使用stringr包的str_replace
函數:
names(mydf) <- str_replace(names(mydf), "MyName.1", "MyNewName")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.