我有一个功能,目标是为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)
因为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))