【问题标题】:How to write a function to rename multiples columns at once?如何编写一个函数来一次重命名多个列?
【发布时间】:2018-12-29 19:28:18
【问题描述】:
df1 <- df %>% 
  rename(newcol1 = oldcol1) %>% 
  rename(newcol2 = oldcol2) %>% 
  rename(newcol3 = oldcol3) %>% 
  rename(newcol4 = oldcol4) %>% 
  rename(newcol5 = oldcol5) 

我正在尝试编写一个我刚刚学到的函数,它会做与上面相同的事情。

renaming = function(df, oldcol, newcol) {
rename(df, newcol = oldcol)

但是我不确定如何处理多列.. 任何帮助将不胜感激!

【问题讨论】:

  • df %&gt;% purrr::set_names(~gsub('old', 'new', .x))df %&gt;% rename_all(~gsub('old', 'new', .x))
  • @alistaire 你会为多列写 c(oldcol1, oldcol2...etc) 吗?
  • 不,上述方法将函数应用于数据框的名称。 set_names 的通常用法是向其传递名称的字符向量,但在这种情况下可能会起作用。

标签: r function dplyr multiple-columns rename


【解决方案1】:

使用基础 R

names(df) <- c("newname1", "newname2", "newname3") # for all varnames
names(df)[c(1,3,4)] <- c("newname1", "newname3", "newname4") # for varnames 1,3,4
names(df)[names(df) == "oldname"] <- "newname" # for one varname

使用 data.table

setnames(dt, old=c("oldname1", "oldname2"), new=c("newname1", "newname2"))

使用 dplyr/tidyverse

df %>% rename(newname1 = oldname1, newname2 = oldname2)

【讨论】:

    【解决方案2】:

    您可以使用 tidyverse 包中的 set_names purrr

    可重现的例子:

    > df <- iris
    > df1 <- df %>% 
         purrr::set_names(c("d","x","y","z","a"))
    
    > df1
          d   x   y   z          a
    1   5.1 3.5 1.4 0.2     setosa
    2   4.9 3.0 1.4 0.2     setosa
    3   4.7 3.2 1.3 0.2     setosa
    

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2014-10-18
      • 2017-05-05
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多