【问题标题】:apply function multiple dataframes in R在R中应用函数多个数据帧
【发布时间】:2017-08-10 03:10:57
【问题描述】:

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

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

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

【问题讨论】:

  • @alistaire 感谢您的链接。很好的阅读。
  • 感谢@alistaire,我会去阅读并进行相应调整。我将对这些数据帧采取许多其他操作,因此在我写入 xls 文件时,合并 dfs 然后将它们拆分回来可能会有意义。

标签: r


【解决方案1】:

我认为主要问题是您在data.frame 中对专栏发表讲话的庄园,您的第一次尝试将适用于这样的事情:

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

无论哪种情况,我都建议采用不同的方法。 data.frames 上的此类操作在 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)

【讨论】:

  • 感谢您的回复@jameselmore,我对 mutate 非常熟悉,但在此应用程序中没有想到它。我还不能让它完全正常工作,但明天会继续尝试,如果我这样做,请告诉你。再次感谢!
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回复。由于我转换为 [] 的 '$' 符号,我无法使其正常工作,但仍然无法使其正常工作。
  • 我认为我的第一个答案应该有效。你能再试一次我的更新吗?
  • 谢谢蒂姆。我刚试过,但收到“x[["ARTICLE_NUMBER"]] 中的错误:下标越界错误”
【解决方案3】:

我在这里和那里看到一些错误:什么是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"

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多