根据日期密钥概括几个R列表的值

  • 本文关键字:几个 列表 日期 密钥 r list
  • 更新时间 :
  • 英文 :


我正在使用一个脚本,其中有两个列表,我正在尝试结合结果,因此我得到了一个新列表。每个列表都有一个日期,然后有两个数字。列表看起来像这样:

         date clicks impressions
1  2019-06-01      1           2 
2  2019-06-02      0           0 
3  2019-06-03      100         120 

        date clicks impressions
1  2019-06-01      2          14
2  2019-06-02      3          14
3  2019-06-03     11          29

我想要一个

的单个列表
        date clicks impressions
1  2019-06-01      3          16
2  2019-06-02      3          14
3  2019-06-03     111         149

做到这一点的最佳方法是什么。随着时间的流逝,我将添加20-30个列表,因此我想拉出第一个列表,然后与第二个列表结合,然后再结合第三个列表,依此类推。我不知道我是否能够假设每个日期都在每个列表中。

假设您的列表称为list_df,您可以使用bind_rowsgroup_by date将它们绑定在一起,然后sum所有其他列。

library(dplyr)
list_df %>%
   bind_rows() %>%
   group_by(date) %>%
   summarise_all(sum)
# A tibble: 3 x 3
#  date       clicks impressions
#  <fct>       <int>       <int>
#1 2019-06-01      3          16
#2 2019-06-02      3          14
#3 2019-06-03    111         149

可以使用Reduce

在基本r中实现哪些
aggregate(.~date, Reduce(rbind, list_df), sum)

我们可以使用 data.table

library(data.table)
rbindlist(list_df)[, lapply(.SD, sum), date]
#         date clicks impressions
#1: 2019-06-01      3          16
#2: 2019-06-02      3          14
#3: 2019-06-03    111         149

数据

list_df <- mget(paste0("df", 1:2))

我们可以做:

cbind(date=df1[,1],do.call(`+`, list(df1[,-1],df2[,-1])),
            row.names = NULL)
        date clicks impressions
1 2019-06-01      3          16
2 2019-06-02      3          14
3 2019-06-03    111         149

如果您不确定日期的存在(然后可以如上所述cbind(:

do.call(`+`,lapply(list(df1,df2), function(x) x[,-1]))
  clicks impressions
1      3          16
2      3          14
3    111         149

这假设数据集将始终具有相同的结构。

最新更新