繁体   English   中英

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

[英]apply function multiple dataframes in 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])

不知道我错过了什么。 任何帮助深表感谢!

我认为主要问题是您在data.frame对列进行处理的庄园,您的第一次尝试将适用于以下内容:

i[['ARTICLE_NUMBER']] <- str_pad(i[['ARTICLE_NUMBER']], width = 11, pad = 0)

无论哪种情况,我都建议采用不同的方法。 dplyr包中, dplyr上的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)

您可以将三个数据框添加到列表中,然后使用lapply():

df_list <- list(a, b, c)
lapply(df_list, function(x) {
    x[["ARTICLE_NUMBER"]] <- str_pad(x[["ARTICLE_NUMBER"]], 11, pad = 0)
})

我在这里和那里看到一些错误:什么是a$ARTICLE_NUMBER需要作为参数传递给str_pad函数? 是否已经存在运行for循环/ lapply函数? 如果是,那么你必须能够编写lapply / for循环函数。 由于我不知道您的数据是什么样的,我在这里会给您一个更简单的版本

将变量定义为:

    a=b=c=list()# Just ensure they are lists

   lapply(list(a=a,b=b,c=c),function(x) {x$ARTICLE_NUMBER= "TYPE FUNCTION HERE";x})

从上面的代码我得到的结果:

$a
$a$ARTICLE_NUMBER
[1] "TYPE FUNCTION HERE"


$b
$b$ARTICLE_NUMBER
[1] "TYPE FUNCTION HERE"


$c
$c$ARTICLE_NUMBER
[1] "TYPE FUNCTION HERE"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM