使用mapply获取每个变量的每日数据

问题描述 投票:1回答:1

我有一个功能,目标是为data.frame上的列获取每个变量的每日数据。范围是一个完整的月,但可以是任何其他范围。

[我的df有一列unit_id,所以我需要我的函数获取列id的第一个unit_id并为march的每个日期获取数据。

| unit | unit_id |
|:-----:|----------|
|  AE   |    123   |
|  AD   |    456   |
|  AN   |    789   |

但是现在,我的函数循环了unit_id col中的id。因此,当我有3 ids时,该函数在第4天再次使用1st id,然后在第5天使用2nd id,依此类推。重复到每月的最后一天。

我需要它在一个月的每一天使用每个ID。

code:

my_dates <- seq(as.Date("2020-03-01"), as.Date("2020-03-31"), by = 1)

my_fetch <- function(unit, unit_id, d) {


  df <- google_analytics(unit_id,
                         date_range = c(d, d),
                         metrics = c("totalEvents"),
                         dimensions = c("ga:date", "ga:eventCategory", "ga:eventAction", "ga:eventLabel"),
                         anti_sample = TRUE)

  df$unidad_de_negocio <- unit


  filename <- paste0(unit, "-", "total-events", "-", d, ".csv")
  path <- "D:\\america\\costos_protv\\total_events"
  write.csv(df, file.path(path, filename), row.names = FALSE)
  print(filename)
  rm(df)
  gc()


}




monthly_fetches <- mapply(my_fetch, df$unit,
                          df$unit_id,
                          my_dates, SIMPLIFY = FALSE)
r mapply
1个回答
0
投票

因为Map/mapply要求所有参数的长度和'df'相同,并且行数为3,'my_dates'长度为31,一种选择是遍历'df',列,然后在内部进行进一步循环Map/mapply

monthly_fetches <- Map(function(x, y) 
                 lapply(my_dates, function(date) my_fetch(x, y, date)),
                    df$unit, d$unit_id)

或者我们可以为“ my_dates”设置外部循环

lapply(my_dates, function(date) Map(my_fetch, df$unit, df$unit_id, date))
© www.soinside.com 2019 - 2024. All rights reserved.