使用dplyr按位置而非名称重命名列名

26

我想知道是否有一种方法可以根据列的位置而不是列名来重命名列名。

以下代码片段展示了如何通过名称进行更改。

suppressPackageStartupMessages(library(dplyr))

gd_url  <- "http://tiny.cc/gapminder"
gtbl  <- gd_url %>%
  read.delim %>%
  tbl_df

gtbl  <- gtbl %>% rename(life_exp = lifeExp, 
                         gdp_percap = gdpPercap)
gtbl

1
那么你想如何进行重命名?目前你的具体需求还不是很清晰。 - A5C1D2H2I1M1N2O1R2T1
4
这样做会不会更容易一些呢?names(gtbl)[5:6] <- c('life_exp', 'gdp_percap') - akrun
1
@akrun 我也会这样做。 - jazzurro
1
rename() 强制你有理由使用名称。 - hadley
谢谢...所以答案是,它不能(用dplyr的方式)完成,这是有很好的理由的 :) - vikas
显示剩余2条评论
2个回答

59

更简单的方法是,您只需使用数字即可重命名列。 这样做有效:

df <- df %>% 
        rename(newNameForFirstColumn = 1, newNameForSecondColumn = 2)

20

如果您喜欢在dplyr管道世界中使用,从dplyr 0.7.2开始可以使用以下命名法按位置重命名:

使用您原始的示例:

gtbl  <- gtbl %>% rename("life_exp" = !!names(.[5]),
                         "gdp_percap" = !!names(.[6]))

感谢您挖掘出这篇老帖子。我之前遇到了类似的问题,在找到这个替代解决方案之前,参考了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接