我有以下测试数据:
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
答案 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