我有多个数据框,并希望在每个数据框中的同名列中执行相同的操作。
我能够执行for循环来读取多个CSV并创建数据帧,但无法使用for循环来在数据帧中的同一列中使用str_pad。
例如,我有:
a$ARTICLE_NUMBER <- str_pad(a$ARTICLE_NUMBER, 11, pad = 0)
b$ARTICLE_NUMBER <- str_pad(b$ARTICLE_NUMBER, 11, pad = 0)
c$ARTICLE_NUMBER <- str_pad(c$ARTICLE_NUMBER, 11, pad = 0)
我试过了:
vendor_list <- c("a", "b", "c")
for(i in vendor_list){
i[ARTICLE_NUMBER] <- str_pad(i[ARTICLE_NUMBER], width = 11, pad = 0)
}
以及:
lapply(vendor_list, function(x){
x[ARTICLE_NUMBER] <- str_pad(x[ARTICLE_NUMBER], width = 11, pad = 0)
return(x)
})
此外:
string_pad <- function(x){
x[ARTICLE_NUMBER] <- str_pad(x[ARTICLE_NUMBER], width = 11, pad = 0)
}
vendor_list <- lapply(vendor_list, string_pad(x) x[, 1])
不确定我错过了什么。非常感谢任何帮助!
答案 0 :(得分:1)
我认为主要问题是您在data.frame
中对该列进行处理的庄园,您的第一次尝试将适合这样的事情:
i[['ARTICLE_NUMBER']] <- str_pad(i[['ARTICLE_NUMBER']], width = 11, pad = 0)
在任何一种情况下,我都建议采用不同的方法。
在data.frame
包
dplyr
上的此类操作更加容易
library(dplyr)
vendor_list <- list(a, b, c)
pad_article_num <-
function(df) {
mutate(df, ARTICLE_NUMBER = str_pad(ARTICLE_NUMBER, width = 11, pad = 0)
}
vendor_list <- lapply(vendor_list, pad_article_num)
答案 1 :(得分:1)
您可以将三个数据框添加到列表中,然后使用lapply():
df_list <- list(a, b, c)
lapply(df_list, function(x) {
x[["ARTICLE_NUMBER"]] <- str_pad(x[["ARTICLE_NUMBER"]], 11, pad = 0)
})