改变数据框架的列名

我有一个名为"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()函数,但没有效果。

谁能帮我解决这个问题?

对该问题的评论 (3)

使用colnames()函数。

R> X  X
  bad     worse
1   1 -2.440467
2   2  1.320113
3   3 -0.306639
R> colnames(X)  X
  good    better
1    1 -2.440467
2    2  1.320113
3    3 -0.306639

你也可以进行子集。


R> colnames(X)[2] 
评论(4)

我用这个。


colnames(dataframe)[which(names(dataframe) == "columnName")] 
评论(3)

这个错误是由"智能引号"(或不管它们叫什么)引起的。 这里的教训是,"不要在一个将引号转换为智能引号的'编辑器中写你的代码"。


names(newprice)[1]
评论(0)

你是否只试过。

`names(newprice)[1]

评论(0)

新推荐的方法是使用setNames函数。 参见 ?setNames。 因为这将创建一个新的data.frame的副本,所以如果你想把结果分配给原来的data.frame,请务必将结果分配给它。


data_frame 
评论(2)

我也有同样的问题,这段代码帮我解决了。


names(data)[names(data) == "oldVariableName"] 
评论(1)

和其他的相似。


cols 
评论(0)

如果你需要一次性重命名多个列,而你只知道旧的列名,你可以使用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

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

现在你想改变"坏&quot。 和"最坏&quot。 改为"good"和"best"。 和"best"。 您可以使用


colnames(df)[which(colnames(df) %in% c("bad","worst") )] 
评论(1)

尝试。


names(newprice) 
评论(0)

你可以直接进行编辑,由。


newprice 
评论(2)

我的栏目名称如下

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

我想更改班级和性别的列名。

colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")
评论(0)

只是为了纠正和稍微扩展Scott Wilson的回答。 你也可以在data.frames上使用data.table的setnames函数。

不要期望操作速度加快,但你可以期望 "setnames "对内存消耗更有效,因为它通过引用更新列名。 这可以通过address函数来跟踪,见下文。

<!--语言。 r--!>


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) 
评论(0)

有几个选项是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()也有三个范围的变体。 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
评论(0)

这可能会有帮助。

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'))
评论(0)

使用此功能通过colname函数更改列名。

colnames(newprice)[1] = "premium"
colnames(newprice)[2] = "change"
colnames(newprice)[3] = "newprice"
评论(0)

如果我们有2个数据帧,下面的工作就可以了


 DF1
评论(0)