いくつかのランダムな列の名前を変更したい大きいデータ フレームで、インデックスではなく現在の列名を使用したいと考えています。データに列を追加または削除すると列インデックスが変わる可能性があるため、既存の列名を使用する方が安定したソリューションであると考えました。これが現在の状態です。
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
は、大規模なデータセットでは非常に重要なコピーオンライトを行わないという点で異なります (データセットが大きいとおっしゃいましたね)。old
とnew
名前を指定するだけです:
require(data.table)
setnames(DT,"MyName.1", "MyNewName")
# or more explicit:
setnames(DT, old = "MyName.1", new = "MyNewName")
?setnames