首页 文章

在dplyr中替换“重命名”

提问于
浏览
100

我喜欢plyr的重命名功能 rename . 我最近开始使用dplyr,并想知道是否有一种简单的方法可以使用dplyr中的函数重命名变量,这与plyr的 rename 一样容易使用?

5 回答

  • 8

    dplyr 0.3版增加了一个新的 rename() 函数,就像 plyr::rename() 一样 .

    df <- rename(df, new_name = old_name)
    
  • 26

    dplyr的下一个版本将支持select的改进版本:

    > mtcars2 <- select( mtcars, disp2 = disp )
    > head( mtcars2 )
                      disp2
    Mazda RX4         160
    Mazda RX4 Wag     160
    Datsun 710        108
    Hornet 4 Drive    258
    Hornet Sportabout 360
    Valiant           225
    > changes( mtcars, mtcars2 )
    Changed variables:
          old         new
    disp  0x105500400
    disp2             0x105500400
    
    Changed attributes:
          old         new
    names 0x106d2cf50 0x106d28a98
    
  • 1

    您实际上可以使用 plyrrename 函数作为 dplyr 链的一部分 . 我认为每个函数a)将 data.frame 作为第一个参数并且b)返回 data.frame 用于链接 . 这是一个例子:

    library('plyr')
    library('dplyr')
    
    DF = data.frame(var=1:5)
    
    DF %>%
        # `rename` from `plyr`
        rename(c('var'='x')) %>%
        # `mutate` from `dplyr` (note order in which libraries are loaded)
        mutate(x.sq=x^2)
    
    #   x x.sq
    # 1 1    1
    # 2 2    4
    # 3 3    9
    # 4 4   16
    # 5 5   25
    

    UPDATE: 当前版本的 dplyr 支持直接重命名为 select 函数的一部分(请参阅上面的Romain Francois帖子) . 关于使用非dplyr函数作为 dplyr 链的一部分的一般声明仍然有效, rename 是一个有趣的例子 .

  • 42

    它未在dplyr(尚)中列为函数:http://cran.rstudio.org/web/packages/dplyr/dplyr.pdf

    如果您不想同时加载plyr和dplyr,则下面的函数(几乎)可以正常工作

    rename <- function(dat, oldnames, newnames) {
      datnames <- colnames(dat)
      datnames[which(datnames %in% oldnames)] <- newnames
      colnames(dat) <- datnames
      dat
    }
    
    dat <- rename(mtcars,c("mpg","cyl"), c("mympg","mycyl"))
    head(dat)
    
                      mympg mycyl disp  hp drat    wt  qsec vs am gear carb
    Mazda RX4          21.0     6  160 110 3.90 2.620 16.46  0  1    4    4
    Mazda RX4 Wag      21.0     6  160 110 3.90 2.875 17.02  0  1    4    4
    Datsun 710         22.8     4  108  93 3.85 2.320 18.61  1  1    4    1
    Hornet 4 Drive     21.4     6  258 110 3.08 3.215 19.44  1  0    3    1
    Hornet Sportabout  18.7     8  360 175 3.15 3.440 17.02  0  0    3    2
    Valiant            18.1     6  225 105 2.76 3.460 20.22  1  0    3    1
    

    编辑:Romain的注释产生以下内容(请注意,更改功能需要dplyr .1.1)

    > dplyr:::changes(mtcars, dat)
    Changed variables:
              old         new        
    disp      0x108b4b0e0 0x108b4e370
    hp        0x108b4b210 0x108b4e4a0
    drat      0x108b4b340 0x108b4e5d0
    wt        0x108b4b470 0x108b4e700
    qsec      0x108b4b5a0 0x108b4e830
    vs        0x108b4b6d0 0x108b4e960
    am        0x108b4b800 0x108b4ea90
    gear      0x108b4b930 0x108b4ebc0
    carb      0x108b4ba60 0x108b4ecf0
    mpg       0x1033ee7c0            
    cyl       0x10331d3d0            
    mympg                 0x108b4e110
    mycyl                 0x108b4e240
    
    Changed attributes:
              old         new        
    names     0x10c100558 0x10c2ea3f0
    row.names 0x108b4bb90 0x108b4ee20
    class     0x103bd8988 0x103bd8f58
    
  • 126

    虽然不完全重命名,但 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
    

相关问题