R 使用map函数从google趋势数据创建数据框

R 使用map函数从google趋势数据创建数据框,r,tidyverse,purrr,gtrendsr,R,Tidyverse,Purrr,Gtrendsr,对r来说比较新,我有一个单词列表,我想通过gtrendsr函数查看google搜索点击,然后创建一个TIBLE,以日期作为索引,以每个单词的相关点击作为列,我正在使用purr中的map函数努力做到这一点 我开始尝试使用for循环,但有人告诉我尝试在tidyverse包中使用map,这是我到目前为止所做的: library(gtrendsr) words = c('cruise', 'plane', 'car') for (i in words) { rel_word_data = gtr

对r来说比较新,我有一个单词列表,我想通过gtrendsr函数查看google搜索点击,然后创建一个TIBLE,以日期作为索引,以每个单词的相关点击作为列,我正在使用purr中的map函数努力做到这一点

我开始尝试使用for循环,但有人告诉我尝试在tidyverse包中使用map,这是我到目前为止所做的:


library(gtrendsr)

words = c('cruise', 'plane', 'car')
for (i in words) {
  rel_word_data = gtrends(i,geo= '', time = 'today 12-m')
  iot <- data.frame()
  iot[i] <- rel_word_data$interest_over_time$hits
}
我需要让gtrends函数一次只取一个单词,否则它会为点击量提供一个值,该值会根据其他单词的流行程度进行调整。因此,基本上,我需要gtrends函数来运行列表中的第一个单词,获取“随时间变化的兴趣”部分中的hits列,并将其添加到最终的数据帧中,该数据帧包含每个单词的一列以及作为索引的日期

我对如何在没有for循环的情况下实现这一点有点迷茫

您可以使用map将所有数据作为列表获取,并使用reduce组合数据

library(purrr)
library(gtrendsr)
library(dplyr)

map(words, ~gtrends(.x,geo= '', time = 'today 12-m')$interest_over_time %>%
                dplyr::select(date, !!.x := hits)) %>%
    reduce(full_join, by = 'date')


#         date cruise plane car
#1  2019-06-30     64    53  96
#2  2019-07-07     75    48  97
#3  2019-07-14     73    48 100
#4  2019-07-21     74    48 100
#5  2019-07-28     71    47 100
#6  2019-08-04     67    47  97
#7  2019-08-11     68    56  98
#.....
您可以使用map将所有数据作为列表获取,并使用reduce合并数据

library(purrr)
library(gtrendsr)
library(dplyr)

map(words, ~gtrends(.x,geo= '', time = 'today 12-m')$interest_over_time %>%
                dplyr::select(date, !!.x := hits)) %>%
    reduce(full_join, by = 'date')


#         date cruise plane car
#1  2019-06-30     64    53  96
#2  2019-07-07     75    48  97
#3  2019-07-14     73    48 100
#4  2019-07-21     74    48 100
#5  2019-07-28     71    47 100
#6  2019-08-04     67    47  97
#7  2019-08-11     68    56  98
#.....

假设每个关键字的gtrends输出长度相同,则可以执行以下操作:

加载包 图书馆咕噜声 图书馆 生成关键字向量 字% 将三个数据帧的列表转换为单个数据帧 map\u dfc~data.frame.x 检查数据 主流 >巡航飞机汽车 > 1 50 75 84 > 2 51 74 83 > 3 100 67 81 > 4 46 76 83 > 5 48 77 84 > 6 43 75 82 strtrends >“数据帧”:59 obs。共有3个变量: >$cruise:int 50 51 100 46 48 48 53 43 50。。。 >$plane:int 75 74 67 76 77 75 73 80 70 79。。。 >$car:int 84 83 81 84 82 84 87 85 85。。。
由v0.3.0于2020年6月27日创建,假设每个关键字的gtrends输出长度相同,您可以执行以下操作:

加载包 图书馆咕噜声 图书馆 生成关键字向量 字% 将三个数据帧的列表转换为单个数据帧 map\u dfc~data.frame.x 检查数据 主流 >巡航飞机汽车 > 1 50 75 84 > 2 51 74 83 > 3 100 67 81 > 4 46 76 83 > 5 48 77 84 > 6 43 75 82 strtrends >“数据帧”:59 obs。共有3个变量: >$cruise:int 50 51 100 46 48 48 53 43 50。。。 >$plane:int 75 74 67 76 77 75 73 80 70 79。。。 >$car:int 84 83 81 84 82 84 87 85 85。。。
由v0.3.0于2020年6月27日创建,谢谢!第一个给了我三个组合成一个的列表,但是单词名没有被传递出去,有没有办法做到这一点?虽然map_df方法听起来更好,但它给了我一个错误:参数1必须有名称谢谢!第一个给了我三个组合成一个的列表,但是单词名没有被传递出去,有没有办法做到这一点?map_df方法听起来更好,但它给了我一个错误:参数1必须有名称