【问题标题】:Split 2 separate data frames, apply functions simultaneously to both then combine拆分 2 个单独的数据帧,同时对两者应用函数,然后合并
【发布时间】:2021-01-12 21:03:14
【问题描述】:

我有 2 个数据框:

df1 列出了一年中不同周收到代金券的人。它显示每个客户在哪周收到他们的代金券。 df2 有 df1 中的人的日常交易。

每个数据框都有数百万行

我想: 1- 按周拆分 df1,得到 52 个数据帧(df1.1、df1.2、df1.3.....df1.52) 2- 对于 52 个数据帧中的每一个,我想执行以下操作:

df2[df2$customer_ID %in% df1.1$customer_ID, ] %>%
   group_by(week_num) %>%
   summarise(tot_sales = sum(sales)

每次循环创建一个包含一行的数据框,即一周。

因此生成的数据框 (df3) 将有 52 行。

到目前为止,我有以下内容:

datalist <- list()

df1_split <- split(df1, df1$week_number)  

for (i in seq_along(df1_split)){
    
    for (j in df2$week_number){

   df2[df2$customer_ID %in% df1_split[[i]]$customer_ID, ] %>%
   mutate(week_received = j) %>%
   group_by(week_received) %>%
   summarise(tot_sales = sum(sales))

   datalist[[i]] <- dat
 
    {
 {

df3 <- bind_rows(datalist)

但这只是连续运行。我做错了什么?

提前谢谢你。

【问题讨论】:

  • 我的意思是输入 j (mutate(week_received = j)。感谢您发现这一点。
  • 在您的更新中,它现在使用i 提取df1 的每一列,而不是来自df1_splitlist 元素
  • 我现在已经尝试了解决方案,仍然连续运行。
  • 没有可复现的例子是无法测试的
  • 您真的不想在week_num 上使用mergejoin 而不是%in%?现在,无论week_num 是什么,您的逻辑都会返回出现在df1 中任何位置的df2 客户。

标签: r loops


【解决方案1】:

在嵌套的for 循环中,子集df1_split[[i]] 而不是原始数据

datalist <- list()

df1_split <- split(df1, df1$week_number)  

for (i in seq_along(df1_split)){

  for (j in df2$week_number){

      tmp <- df2[df2$customer_ID %in% df1_split[[i]]$customer_ID, ] %>%
        mutate(week_received = j) %>%
         group_by(week_received) %>%
         summarise(tot_sales = sum(sales))

         datalist <- c(datalist, list(dat))

    }
  }

 df3 <- bind_rows(datalist)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多