使用 googledrive4 包,访问 google drive 上的文件非常容易。
p_load(googledrive4, tidyverse)
dribble1 <- drive_ls()
> dribble1
# A dribble: 2000 × 3
name id drive_resource
<chr> <drv_id> <list>
1 somefile1.zip 1w76E2ze0p00jtxxxxxxxxxxxxxxxxxxx <named list [37]>
2 somefile2.zip 1Zau_jwYlDHFK4xxxxxxxxxxxxxxxxxxx <named list [37]>
...
但是,我正在努力根据嵌套在“drive_resource”命名列表中的参数来过滤结果。例如,我希望按日期时间过滤以创建一个仅包含在特定日期之后保存的文件的运球。
在绝望中,经过多次尝试和错误,我实现了我想要的,通过以下两个步骤:
p_load(tidyverse, lubridate)
# 1 - unnest to make a list of ID's that match my criteria
range <- interval(as_date("2021/1/1", now())
filtered_list <- dribble1 %>%
unnest_longer(col = drive_resource) %>%
filter(drive_resource_id == "modifiedTime") %>%
unnest_longer(drive_resource, values_to = "modtime") %>%
mutate(modtime = as_datetime(modtime)) %>%
filter(modtime %within% range)
# 2 - filter the original dribble with filtered list of ID's
result_dribble <- dribble1 %>%
filter(id %in% filtered_list$id)
这可行,但我觉得必须有更好的方法来更优雅地处理嵌套列表,而无需创建中间对象。
有人可以对此有所了解吗?
(抱歉缺少reprex。运球以我尚未完全理解的独特方式构建,并且无法使用datapasta重建包含嵌套命名列表的运球)
上面是一个简化的例子,我正在处理的数据要大得多,我希望 RStudio 的截图对不熟悉 googledrive4 的人有意义。