投稿

2月, 2018の投稿を表示しています

Rのデータフレームで、列名指定で列名の一部を変更する方法

まずは、動作確認用のサンプルコードです。 # サンプルコードのデータフレーム age    <- c( 20,  30,  40) height <- c(170, 168, 175) wait   <- c( 67,  64,  70) df <- data.frame(age, height, wait) df   age height wait 1  20    170   67 2  30    168   64 3  40    175   70 ちょ、待てよ。体重のweightがwaitになってんじゃん。 ってことで、この列名だけ変更したいと。 列名全体のベクトルをまとめて指定して変更する方法↓ names(df) <- c("age", "height", "weight") とか、 インデックス番号を使って、一部を変更する方法↓ names(df)[3] <- "weight" とかがあるんですが、列数がめちゃめちゃ多いデータだと数えるのが大変だし、列の削除や挿入に対してロバストでないし。できれば、列名の指定で変更を行いたい。 ちょっとコードがごちゃごちゃしますが、↓こんな感じでできます。 names(df)[ which( names(df)=="wait" ) ] <- "weight" 内側から順に見ていくと・・・ names(df)=="wait" で、列名が "wait" になっている位置が FALSE FALSE TRUE というベクトルで返ってきます。 それを which() に渡すと、「3」というインデックス番号が返ってきます。 なのでこの「3」を names(df)[] に対するインデックスの指定に使えばOKというわけです。