【问题标题】:apply the same custom function to multiple data frames (and return as data frames not a list)将相同的自定义函数应用于多个数据框(并作为数据框而不是列表返回)
【发布时间】:2016-10-25 03:02:35
【问题描述】:

我有一堆不同的数据框,我想对每个数据框运行相同的自定义函数。我希望将输出返回到每个原始数据框名称中,而不是列表中。

假设我有一堆不同的数据框:

mtcars1,mtcars2,mtcars3.....mtcars20。在 CYL 列中,每一个都将具有不同的因子水平。我想运行一个函数:

  1. 将 CYL 值从一个因子返回为一个数字 - as.numeric(as.character())
  2. 计算一些新列,该列是 mpg 的滚动平均值。

现在执行此操作并应用此功能的代码是什么?同样,我希望输出全部为 mtcars1...mtcars20 数据帧。

我试过看

 lapply(mylist=c(mtars1...mtcars20)  function(x)    myfunct()) 

但我遇到了麻烦。

【问题讨论】:

  • 这迫切需要一个data.frames的列表。 lapply(list(mtcars1, mtcars2, ...), myfunct) 不工作吗?
  • 我试过了,但可能我的语法有误。举一个简单的例子,假设我的函数只想将 CYL 列从因子值转换为数字。我该怎么做?我花了一段时间努力解决这个问题,但我无法让它发挥作用,所以我认为还有其他方法或者我的方法有误?
  • 请参阅working with lists of data.frames 上的以下帖子。 gregor 的回答有很多关于如何使用这些对象的好技巧。将 data.frames 放入列表的其他一些帖子方法。

标签: r list function lapply


【解决方案1】:
## generate data
for (i in 1:5) assign(paste0('mtcars',i),transform(mtcars,cyl=factor(cyl+10^i)));

## collect loose data.frames into one list, and remove the originals
nms <- ls(pattern='^mtcars\\d+$');
dfs <- mget(nms);
rm(list=nms);

## solution
library(zoo); ## for rollmean()
for (i in seq_along(dfs)) {
    dfs[[i]]$cyl <- as.numeric(as.character(dfs[[i]]$cyl));
    dfs[[i]]$some.new.column <- rollmean(dfs[[i]]$mpg,5L,fill=NA);
}; ## end for

【讨论】:

    【解决方案2】:

    仍然可以使用 lapply() 函数返回数据框列表:

    dfs <- rep(list(mtcars), 4) #list of data frames
    
    dfs <- lapply(dfs, function(x) {
                   names(x)[1] <- "m_p_g"
                   x})
    lapply(dfs, head, 2)
    # [[1]]
    #               m_p_g cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4        21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag    21   6  160 110  3.9 2.875 17.02  0  1    4    4
    
    # [[2]]
    #               m_p_g cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4        21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag    21   6  160 110  3.9 2.875 17.02  0  1    4    4
    
    # [[3]]
    #               m_p_g cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4        21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag    21   6  160 110  3.9 2.875 17.02  0  1    4    4
    
    # [[4]]
    #               m_p_g cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4        21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag    21   6  160 110  3.9 2.875 17.02  0  1    4    4
    

    【讨论】:

      猜你喜欢
      • 2019-01-14
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-10-28
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多