【问题标题】:Aggregate dataframes in a list by date and then merge back - lapply?按日期聚合列表中的数据框,然后合并回来 - lapply?
【发布时间】:2018-12-19 19:40:58
【问题描述】:

我正在努力弄清楚如何聚合然后合并数据框列表。有人做过吗?

这是一个例子。我有一个通过拆分分类变量创建的数据框列表。

list1df 93 obs of 6 variables:
- categoricalvar1: Factor w...
- categoricalvar2: Factor w...
- categoricalvar3: Factor w...
- numericvar1: num...
- numericvar2: num...
- thedate: Date, format "2018-11-13"...

list2df 3988 obs of 6 variables:
- categoricalvar1: Factor w...
- categoricalvar2: Factor w...
- categoricalvar3: Factor w...
- numericvar1: num...
- numericvar2: num...
- thedate: Date, format "2018-11-13"...

list3df 563 obs of 6 variables:
- categoricalvar1: Factor w...
- categoricalvar2: Factor w...
- categoricalvar3: Factor w...
- numericvar1: num...
- numericvar2: num...
- thedate: Date, format "2018-11-13"...

我正在试图弄清楚如何使用/应用这样的东西:

sumtable<- function(thedate,df,thefun)
{
  dfgrouped <- aggregate(. ~thedate, data=df, thefun, na.rm=TRUE)
  return(dfgrouped)
}

到列表中的每个单独的数据帧,按天创建聚合帧,之后我将使用 ldply(thebiglist,data.frame) 将它们全部粘合在一起。

我不知道如何使 sumtable 函数与 lapply 和列表​​中的所有帧一起使用。提前谢谢!

【问题讨论】:

    标签: r dplyr data.table lapply


    【解决方案1】:

    我们可以将 data.frames 放在 list 中,并将 aggregate 与特定功能一起使用

    lst <- lapply(mget(ls(pattern = '^list\\d+df$')), function(x) 
        aggregate(. ~ thedate, data = x, FUN = max, na.rm = TRUE))
    
    do.call(rbind, lst)
    

    【讨论】:

    • 如果数据框的名称大相径庭,但我们知道我们想要所有这些,该怎么办?我们需要正则表达式吗?
    • @ChristopherPenn 如果您的 data.frame 对象名称为 Abcdxy1214dfhellomydeardontyouknowme 等,则它们没有任何模式。将其创建为列表的唯一方法是list(Abcd, xy12, ..., hellomydear)
    • 但是,如果这些是在环境中创建的唯一对象,那么mget(ls()) 应该返回所有这些对象
    • 有道理,我们想要贪婪地获取所有列表对象。会试一试。
    • 我无法让它看到模式。在调用 split() 之前的父数据框中,我做了一个 paste0 来添加 chan。到每个分类变量,以便每个数据帧现在是 chan.Abcd、chan.xy12、chan14df 等。我修改了模式以匹配 pattern='chan\\.'但 ls 本身返回 null。我可以使用 ls.str 查看父列表和嵌套数据框,但无法引用它们。知道我做错了什么吗? ls(pattern = "chan\\.") character(0) 是结果
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2018-10-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多