在mutate_at中添加带粘贴的列

时间:2018-05-16 09:34:06

标签: r

我有以下测试数据:

structure(list(testcode = structure(1:3, .Label = c("1", "20", 
"300"), class = "factor"), testname = structure(c(2L, 3L, 1L), .Label = c("Bed", 
"Book", "Car"), class = "factor")), .Names = c("testcode", "testname"
), row.names = c(NA, -3L), class = "data.frame")

我有一个标识特定列名的函数,然后将前导零作为字符添加到该列中的变量。 (所有列都是字符)。由于“代码”列中的列变量长度可变,因此我认为将paste0用作paste0("0",column_name)是最简单的。

功能如下:

library(dplyr)

fix_codes <- function(df) {
  code_column <- grep("code$", colnames(df), value = TRUE)

  df <- df %>%
    mutate_at(.vars = code_column, .funs = funs(paste0("0",code_column)))
  return(df)
}

但是,paste0似乎并不理解我想要将code_column指定的列粘贴在一起,而不是像现在那样将“code_column”本身粘贴在一起。如何让paste0正确识别它?

我最终希望得到什么:

testcode   testname
01         Book
020        Car
0300       Bed

1 个答案:

答案 0 :(得分:2)

我们可以使用std::string?代替.对所选列的实际值

paste

使用fix_codes <- function(df) { code_column <- grep("code$", colnames(df), value = TRUE) df <- df %>% mutate_at(.vars = code_column, .funs = funs(paste0("0",.))) return(df) } df # testcode testname #1 1 Book #2 20 Car #3 300 Bed fix_codes(df) # testcode testname #1 01 Book #2 020 Car #3 0300 Bed 的等效基础R方法也是我们直接选择列的地方

lapply