簡體   English   中英

重命名由當前名稱引用的多個數據框列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM