largeデータフレームのランダムな列の名前を変更し、インデックスではなく現在の列名を使用します。データに列を追加または削除すると列インデックスが変更される可能性があるため、既存の列名を使用する方がより安定したソリューションであると考えています。これは私が今持っているものです:
_mydf = merge(df.1, df.2)
colnames(mydf)[which(colnames(mydf) == "MyName.1")] = "MyNewName"
_
元のmerge()
呼び出しまたは2行目だけで、このコードを単純化できますか? _"MyName.1"
_は、実際には2つの異なるxtsオブジェクトのxts merge
の結果です。
names(mydf)[names(mydf) == "MyName.1"] = "MyNewName" # 13 characters shorter.
ただし、最終的にベクトルを置き換えることができます。その場合は、%in%
の代わりに ==
およびMyName.1をMyNewNameと等しい長さのベクトルとして設定します
_data.frame
_の列名を変更する際の問題は、ほとんど信じられないほど、_data.frame
_全体がコピーされることです。 _.GlobalEnv
_にあり、他の変数がそれを指していない場合でも。
_data.table
_ package には、データセット全体をコピーせずに参照によって列名を変更するsetnames()
関数があります。 _data.table
_は、コピーオンライトを行わないという点で異なります。これは、大規模なデータセットにとって非常に重要です。 (データセットが大きいと言いました。)単にold
とnew
の名前を指定してください:
_require(data.table)
setnames(DT,"MyName.1", "MyNewName")
# or more explicit:
setnames(DT, old = "MyName.1", new = "MyNewName")
?setnames
_
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")