在R中应用函数多个数据帧

时间:2017-08-10 03:10:57

标签: r

我有多个数据框,并希望在每个数据框中的同名列中执行相同的操作。

我能够执行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])

不确定我错过了什么。非常感谢任何帮助!

2 个答案:

答案 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)
})