私は "newprice"と呼ばれるデータフレーム(下記参照)を持っています、そして私は私のプログラムでRの列名を変更したいのです。
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
実際にこれは何をしているのですか:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
あなたが見るように私はそれぞれの列名を異なるようにしたいので、私はこれをループに入れませんでした。
プログラムをRコンソールに貼り付けると、これが出力になります。
> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"
私は同様にc()
関数の代わりにc("premium")
関数、例えばpaste()
を使ってみましたが、役に立ちません。
誰かが私がこれを理解するのを手伝ってくれる?
colnames()
関数を使います。
R> X <- data.frame(bad=1:3, worse=rnorm(3))
R> X
bad worse
1 1 -2.440467
2 2 1.320113
3 3 -0.306639
R> colnames(X) <- c("good", "better")
R> X
good better
1 1 -2.440467
2 2 1.320113
3 3 -0.306639
サブセット化することもできます。
R> colnames(X)[2] <- "superduper"
私はこれを使う:
colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
エラーは「スマート引用符」(またはそれらが呼ばれるものは何でも)によって引き起こされます。ここでの教訓は、「引用符をスマート引用符に変換する 'エディタ'でコードを書かないで」です。
names(newprice)[1]<-paste(“premium”) # error
names(newprice)[1]<-paste("premium") # works
また、paste("premium")
は必要ありません(paste
の呼び出しは冗長です)。混乱を避けるために<-
の周囲にスペースを入れることをお勧めします(例:x <- -10; if(x<-3) "hi" else "bye"; x
)。
あなただけ試してみました:
names(newprice)[1]<-"premium"
?
これを行うための新しい推奨方法は、setNames
関数を使用することです。 ?setNames
を参照してください。これはdata.frame
の新しいコピーを作成するので、それがあなたの意図であれば、結果をオリジナルのdata.frame
に割り当てることを忘れないでください。
data_frame <- setNames(data_frame, c("premium","change","newprice"))
以前の答えで提案されている方法でcolnames
を使用すると、Rの新しいバージョンでは警告が表示されます。
これが代わりにdata.table
である場合は、data.table
関数setnames
を使用できます。これにより、特定の列名または単一の列名 参照による変更 :
setnames(data_table, "old-name", "new-name")
私は同じ問題を抱えていて、このコードはうまくいった。
names(data)[names(data) == "oldVariableName"] <- "newVariableName"
つまり、このコードは次のことを行います。
names(data)
は、データフレーム内のすべての名前を調べます(data
)
[names(data) == oldVariableName]
は名前を変更したい変数名(oldVariableName
)を抽出し、<- "newVariableName"
は新しい変数名を割り当てます。
他の人と同様:
cols <- c("premium","change","newprice")
colnames(dataframe) <- cols
非常にシンプルで簡単に変更できます。
古いカラム名しかわからないときに、一度に複数のカラムだけでなく複数のカラムの名前を変更する必要がある場合は、colnames
関数と%in%
演算子を使用できます。例:
df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3])
bad worse worst
1 1 -0.77915455 A
2 2 0.06717385 B
3 3 -0.02827242 C
今度は「悪い」と「最悪」を「良い」と「最良」に変更します。あなたが使用することができます
colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best")
これは
good worse best
1 1 -0.6010363 A
2 2 0.7336155 B
3 3 0.9435469 C
試してみてください。
names(newprice) <- c("premium", "change", "newprice")
あなただけの編集を行うことができます:
newprice <- edit(newprice)
手動で列名を変更してください。
私の列名は以下の通りです
colnames(t)
[1] "Class" "Sex" "Age" "Survived" "Freq"
ClassとSexの列名を変更したい
colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")
Scott Wilsonの回答を修正し、少しだけ拡張してください。
data.framesでもdata.tableのsetnames
関数を使うことができます。
操作の高速化は期待できませんが、参照によって列名を更新するので、setnames
のほうがメモリ消費の効率が上がると期待できます。これはaddress
関数で追跡できます。下記を参照してください。
library(data.table)
set.seed(123)
n = 1e8
df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(df)
#[1] "0x208f9f00"
colnames(df) <- c("good", "better")
address(df)
#[1] "0x208fa1d8"
rm(df)
dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(dt)
#[1] "0x535c830"
setnames(dt, c("good", "better"))
address(dt)
#[1] "0x535c830"
rm(dt)
あなたがあなたの記憶限界に当たっているのであれば、あなたは代わりにこれを使うことを考えるかもしれません。
dplyr::rename()
とdplyr::select()
にはいくつかのオプションがあります。
library(dplyr)
mtcars %>%
tibble::rownames_to_column('car_model') %>% # convert rowname to a column. tibble must be installed.
select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>% # rename specific columns and reorder
rename(weight = wt, cylinders = cyl) %>% # another option for renaming specific columns that keeps everything by default
head(2)
car_model est_mpg horse_power cylinders disp drat weight qsec vs am gear carb
1 Mazda RX4 21 110 6 160 3.9 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21 110 6 160 3.9 2.875 17.02 0 1 4 4
dplyr::rename()
には3つのスコープ付きの変種もあります:すべての列名のためのdplyr::rename_all()
、列名を条件付きでターゲティングするためのdplyr::rename_if()
、および選択された名前付き列のためのdplyr::rename_at()
。次の例では、スペースとピリオドをアンダースコアに置き換えて、すべて小文字に変換します。
iris %>%
rename_all(~gsub("\\s+|\\.", "_", .)) %>%
rename_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
dplyr::select_all()
も同様に使用できます。
iris %>%
select_all(~gsub("\\s+|\\.", "_", .)) %>%
select_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
これは役に立つかもしれません:
rename.columns=function(df,changelist){
#renames columns of a dataframe
for(i in 1:length(names(df))){
if(length(changelist[[names(df)[i]]])>0){
names(df)[i]= changelist[[names(df)[i]]]
}
}
df
}
# Specify new dataframe
df=rename.columns(df,list(old.column='new.column.name'))
Colname関数で列名を変更するためにこれを使用してください。
colnames(newprice)[1] = "premium"
colnames(newprice)[2] = "change"
colnames(newprice)[3] = "newprice"
2つのデータフレームがある場合、次のようになります。
DF1<-data.frame('a', 'b')
DF2<-data.frame('c','d')
DF1の名称を次のように変更します
colnames(DF1)<- colnames(DF2)
すぐにできた
names(newprice) <- c("premium","change","newprice")
使用している貼り付けコマンドは、少なくとも2つの引数を取ります。これはExcelの連結関数のように機能するため、エラーが発生します。
選択した列でデータを取得する
get.the.df <- read_Excel("df.xls") %>%
select("X1","X2","X3");names(get.the.df)
get.the.df colnames(get.the.df) <- c("X22","X11","X33");names(get.the.df)
の列の名前を変更する