現在の名前で参照されている複数のデータフレーム列の名前を変更する 質問する

現在の名前で参照されている複数のデータフレーム列の名前を変更する 質問する

いくつかのランダムな列の名前を変更したい大きいデータ フレームで、インデックスではなく現在の列名を使用したいと考えています。データに列を追加または削除すると列インデックスが変わる可能性があるため、既存の列名を使用する方が安定したソリューションであると考えました。これが現在の状態です。

mydf = merge(df.1, df.2)
colnames(mydf)[which(colnames(mydf) == "MyName.1")] = "MyNewName"

このコードを、元のmerge()呼び出しまたは 2 行目だけを簡略化できますか?実際には、 2 つの異なる xts オブジェクトの"MyName.1"xts の結果です。merge

ベストアンサー1

の列名を変更する際の問題はdata.frame、ほとんど信じられないことですが、全体がdata.frameコピーされることです。 たとえそれが中にあり.GlobalEnv、他の変数がそれを指していない場合でもです。

data.tableパッケージsetnames()には、データセット全体をコピーせずに参照によって列名を変更する関数があります。data.tableは、大規模なデータセットでは非常に重要なコピーオンライトを行わないという点で異なります (データセットが大きいとおっしゃいましたね)。oldnew名前を指定するだけです:

require(data.table)
setnames(DT,"MyName.1", "MyNewName")
# or more explicit:
setnames(DT, old = "MyName.1", new = "MyNewName")
?setnames

おすすめ記事