重命名R中数据框中的特定列

时间:2019-12-02 02:21:38

标签: r

我正在尝试更改R中数据框的特定列的名称。例如, 如果我有一个看起来像这样的数据框:

df <- data.frame(
x1 = rnorm(10),
y1 = rnorm(10),
x2 = rnorm(10),
y2 = rnorm(10),
x3 = rnorm(10),
y3 = rnorm(10)
)
head(df,3)

           x1          y1         x2          y2         x3         y3
1 -1.42423743  0.21855807 -0.1456853  1.46204179  1.6474040  2.2384782
2  1.17158831 -1.41602524 -1.2891551  1.45028848 -1.2726250 -0.3331051
3 -0.21959357  0.84741665  0.2745170  0.81040227 -0.3520883 -0.3103068

我想做的是将所有 y 列的名称(即y1,y2,y3)更改为简单的 y 。因此,结果数据帧将如下所示:

           x1           y         x2           y         x3          y
1 -1.42423743  0.21855807 -0.1456853  1.46204179  1.6474040  2.2384782
2  1.17158831 -1.41602524 -1.2891551  1.45028848 -1.2726250 -0.3331051
3 -0.21959357  0.84741665  0.2745170  0.81040227 -0.3520883 -0.3103068

我意识到数据框中现在有多个y列,但出于我的目的,这是必要的。

我不确定如何执行此操作,但是我正在考虑遍历df并更改列名...此代码不起作用,但我正在考虑以下内容:

for(j in 1:length(df)){
  colnames(df$[j])[which(names(df$[j]) == "y[j]")] <- "y"
} 

关于我将如何实现这一目标的任何建议?

1 个答案:

答案 0 :(得分:4)

不建议使用多个具有相同名称的列,但是如果仍然需要这样做,则是一种方法

names(df)[grep("^y", names(df))] <- "y"

或者是无正则表达式的方法

names(df)[startsWith(names(df), "y")] <- "y"