我正在处理数据框列表。在每个数据帧中,我想用前导零填充单个 ID 变量。ID 变量是字符向量,并且始终是数据框中的第一个变量。然而,在每个数据帧中,ID 变量具有不同的长度。例如:
df1_id 的范围为 1:20,因此我需要最多填充一个零,df2_id 的范围为 1:100,因此我需要最多填充两个零,等等。
我的问题是,如何在不必为列表中的每个数据帧编写一行代码的情况下填充每个数据帧。
如上所述,我可以通过在每个数据帧上分别使用 str_pad 函数来解决这个问题。例如,请参见下面的代码:
#Load stringr package
library(stringr)
#Create sample data frames
df1 <- data.frame("x" = as.character(1:20), "y" = rnorm(20, 10, 1),
stringsAsFactors = FALSE)
df2 <- data.frame("v" = as.character(1:100), "y" = rnorm(100, 10, 1),
stringsAsFactors = FALSE)
df3 <- data.frame("z" = as.character(1:1000), "y" = rnorm(1000, 10, 1),
stringsAsFactors = FALSE)
#Combine data fames into list
dfl <- list(df1, df2, df3)
#Pad ID variables with leading zeros
dfl[[1]]$x <- str_pad(dfl[[1]]$x, width = 2, pad = "0")
dfl[[2]]$v <- str_pad(dfl[[2]]$v, width = 3, pad = "0")
dfl[[3]]$z <- str_pad(dfl[[3]]$z, width = 4, pad = "0")
虽然这个解决方案对于一个简短的列表来说效果相对较好,但随着数据帧数量的增加,它变得有点笨拙。
如果有一种方法可以将某种“序列”向量嵌入到 str_pad 函数的宽度参数中,我会很高兴。像这样的东西:
dfl <- lapply(dfl, function(x) {x[,1] <- str_pad(x[,1], width = SEQ, pad =
"0")})
其中 SEQ 是可变长度的向量。使用上面的例子,它看起来像:
seq <- c(2,3,4)
在此先感谢您,如果您有任何问题,请告诉我。
~kj