2

Jaredが提案したように、私はこの回答から、の2番目の引数を最適化しようとしています。plyr:rename

要するに、彼らplyrはこのように使用してデータフレームのいくつかの列の名前を変更しています、

df <- data.frame(col1=1:3,col2=3:5,col3=6:8)
df
newNames <- c("new_col1", "new_col2", "new_col3")
oldNames <- names(df)

require(plyr)
df <- rename(df, c("col1"="new_col1", "col2"="new_col2", "col3"="new_col3"))
df

Jaredの書き込みを渡す際に、「[a] ndは、手動ではないように、名前を変更する2番目の引数を作成する際に創造的になることができます。」

私はこのように創造的にしようとしました、

df <- data.frame(col1=1:3,col2=3:5,col3=6:8)
df
secondArgument <- paste0('"', oldNames, '"','=', '"',newNames, '"',collapse = ',')
df <- rename(df, secondArgument)
df

しかし、それは機能しません、誰かが私がこれを自動化するのを手伝ってくれるでしょうか?

ありがとう!

更新日9月9日11:55:42PM

私は自分の質問をもっと具体的にすべきだと気づきました。

私が使用してplyr::renameいるのは、実際の例では他の変数があり、名前を変更したい変数の位置が常にわからないためです。質問に更新を追加します

私の場合はこのように見えますが、100以上の変数があります

df2 <- data.frame(col1=1:3,col2=3:5,col3=6:8)
df2
df2 <- rename(df2, c("col1"="new_col1", "col3"="new_col3"))
df2

df2 <- data.frame(col1=1:3,col2=3:5,col3=6:8)
df2
newNames <- c("new_col1", "new_col3")
oldNames <- names(df[,c('col1', 'col3')])
secondArgument <- paste0('"', oldNames, '"','=', '"',newNames, '"',collapse = ',')
df2 <- rename(df2, secondArgument)
df2

明確にする必要があることがあればコメントを追加してください。

4

3 に答える 3

3

newNamesからの名前に名前を設定しますoldNames

R> names(newNames) <- oldNames
R> newNames
      col1       col2       col3 
"new_col1" "new_col2" "new_col3" 
R> df <- rename(df, newNames)
R> df
  new_col1 new_col2 new_col3
1        1        3        6
2        2        4        7
3        3        5        8
于 2012-09-09T21:26:37.050 に答える
3

修正された質問の解決策:

df2 <- data.frame(col1=1:3,col2=3:5,col3=6:8)
df2
newNames <- c("new_col1", "new_col3")
oldNames <- names(df2[,c('col1', 'col3')]) 

(定義上、oldNames等しいではありませんか?)c('col1','col3')

解決策plyr

secondArgument <- setNames(newNames,oldNames)
library(plyr)
df2 <- rename(df2, secondArgument)
df2

または、ベースRで次のことができます。

names(df2)[match(oldNames,names(df2))] <- newNames
于 2012-09-09T23:22:21.013 に答える
2

plyr::rename新しい名前を値として、古い名前を名前として持つ名前付き文字ベクトルが必要です。

これは機能するはずです:

names(newNames) <- oldNames
df <- rename(df, newNames)
df
  new_col1 new_col2 new_col3
1        1        3        6
2        2        4        7
3        3        5        8
于 2012-09-09T21:31:39.840 に答える