web-dev-qa-db-ja.com

データフレームの列名を変更する

私は "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()を使ってみましたが、役に立ちません。

誰かが私がこれを理解するのを手伝ってくれる?

339
Son

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"
533

私はこれを使う:

colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
147
Matheus Abreu

エラーは「スマート引用符」(またはそれらが呼ばれるものは何でも)によって引き起こされます。ここでの教訓は、「引用符をスマート引用符に変換する 'エディタ'でコードを書かないで」です。

names(newprice)[1]<-paste(“premium”)  # error
names(newprice)[1]<-paste("premium")  # works

また、paste("premium")は必要ありません(pasteの呼び出しは冗長です)。混乱を避けるために<-の周囲にスペースを入れることをお勧めします(例:x <- -10; if(x<-3) "hi" else "bye"; x)。

74
Joshua Ulrich

あなただけ試してみました:

names(newprice)[1]<-"premium"

41
Jamie

これを行うための新しい推奨方法は、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")
33
Scott C Wilson

私は同じ問題を抱えていて、このコードはうまくいった。

names(data)[names(data) == "oldVariableName"] <- "newVariableName"

つまり、このコードは次のことを行います。

names(data)は、データフレーム内のすべての名前を調べます(data

[names(data) == oldVariableName]は名前を変更したい変数名(oldVariableName)を抽出し、<- "newVariableName"は新しい変数名を割り当てます。

他の人と同様:

cols <- c("premium","change","newprice")
colnames(dataframe) <- cols

非常にシンプルで簡単に変更できます。

15
Adam Erickson

古いカラム名しかわからないときに、一度に複数のカラムだけでなく複数のカラムの名前を変更する必要がある場合は、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
10
discipulus

試してみてください。

names(newprice) <- c("premium", "change", "newprice")
8
ngamita

あなただけの編集を行うことができます:

newprice <- edit(newprice)

手動で列名を変更してください。

7
Baykal

私の列名は以下の通りです

colnames(t)
[1] "Class"    "Sex"      "Age"      "Survived" "Freq" 

ClassとSexの列名を変更したい

colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")
5
Mehul Katara

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)

あなたがあなたの記憶限界に当たっているのであれば、あなたは代わりにこれを使うことを考えるかもしれません。

5
jangorecki

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
3
sbha

これは役に立つかもしれません:

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'))
2
Chris

Colname関数で列名を変更するためにこれを使用してください。

colnames(newprice)[1] = "premium"
colnames(newprice)[2] = "change"
colnames(newprice)[3] = "newprice"
2
Sophanna

2つのデータフレームがある場合、次のようになります。

 DF1<-data.frame('a', 'b')
 DF2<-data.frame('c','d')

DF1の名称を次のように変更します

 colnames(DF1)<- colnames(DF2)
1
Raghavan vmvs

すぐにできた

names(newprice) <- c("premium","change","newprice")

使用している貼り付けコマンドは、少なくとも2つの引数を取ります。これはExcelの連結関数のように機能するため、エラーが発生します。

0
Aayush Agrawal

選択した列でデータを取得する

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)の列の名前を変更する

0
Seyma Kalay