Rのデータフレームの列名を変更する方法 [閉まっている]


9
 names(mydat)[c(name)]<-c("newname") 

このことから、データフレームmydatの列/変数名「name」が「newname」に置き換えられていることがわかります。

私の質問は、これをループで実行して、次のようなことをしたいかどうかです:

newname1 newname2 newname3 newname4など、どうすればよいですか?

これは何をしたのか、それはうまくいきませんでした:

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

これをコーディングする方法はありますか?助けてくれたかもしれないすべての人に感謝します。オウスイサク


4
この質問は純粋にプログラミングに関するものであるため、トピックから外れているようです。
gung-モニカの復活

Qualtricsからダウンロードされた一部のデータセットで頻繁に発生するため、一部の醜い変数名(abcde_1_1、abcde_2_2、abcde_3_3など)の名前を変更する必要がある場合: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

回答:


10

最も明白な解決策は、次のコードをforループで変更することです。

   names(mydat)[c(name)] <- paste("newname",i,sep="")

ただし、変数を明確にする必要がありますname。現時点では、このループは単一の列の4つの名前変更を実行します。

一般に、変更したい名前がベクトルの場合、これは標準的なサブセット化手順です。

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes

Mpiktasさん、こんにちは。あなたのソリューションは素晴らしい働きをします。どうもありがとう。そしてみんなにも感謝します
息子、

1
@Owusu、このサイトでの感謝の気持ちの表現は、回答とその受け入れに賛成です。よくある質問をご覧ください。いずれにせよ、お役に立てて嬉しいです。
mpiktas '10年

6

次のように、sprintfまたはを使用してみてくださいpaste

names(mydat)<-sprintf("name%d",1:10)

また、これnames(mydat)[c(name)]はあまりナンセンスではないことに注意してください。c(name)と書くことと同じでnameあり、「変数と呼ばれる変数の値を取得する」を意味しnameます。ブラケットは少なくとも要素を抽出しますが、変数が数値またはブールインデックスを保持しているnames(mydat)場合のみですname

で呼び出さnameれた列を置き換える場合はname1, name2, ..., nameN、次のようなものを使用します。

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

編集:まあ、重複した列名を削除したいだけなら、もっと簡単な方法があります。Rにはmake.namesこの問題を修正する関数があります。次のように使用できます。

names(mydat)<-make.names(names(mydat),unique=TRUE)

さらに短く、同じことを書くことによってのみ得ることができます:

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

@mbq、==文字列の部分一致はありますか?
mpiktas

@mpiktasいいえ。ただし、ここでは完全一致のみが必要です。greplより一般的な仕事をするために大丈夫でしょう。

@mbq、はい。ただし、同じ名前の列が複数あると想定しています。Rはそれを許可しますが、私はこの機能を使用しないようにしています。
mpiktas

@mpiktasどうやらOPもそうなので、この質問。

@mbqとの混同を明確にするためのおかげ名(mydat)[C(名)] OPが書かれているので、私は列/変数名「名前」があることを知っている私はのようだった「すごい可能であること?」そして名前で名前にアクセスしようとした...愚かな私;)。質問を編集することを謙虚に提案できますか?
steffen

5

私は同じ問題を抱えていて、私はこのコードでそれを解決しました:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.