有没有一种方法可以自动从两个或多个列表中提取元素?

时间:2019-04-21 14:07:50

标签: r list extract google-trends

我的目标是自动化趋势数据的提取以及从列表中提取"interest_over_time"

考虑两个步骤的问题:

  • 基于一组关键字自动获取数据

  • 有条不紊地自动提取元素

我无法完成第2步。

关于如何完成此操作的任何想法?

第一步-自动获取Google趋势数据

library(gtrendsR)
a <- c("sony", "apple")

for (i in a) {
  name <- (paste(i, sep=""))
  assign(name, gtrends(keyword=i, time="now 1-H"))
  print(name)
}

Step2-提取元素

sony[["interest_over_time"]]

代替上面的手动操作,我可以使用for或其他功能来自动执行此操作吗?

2 个答案:

答案 0 :(得分:0)

您可以使用sapply阅读。数据将存储到列表l中。

library(gtrendsR)
l <- sapply(c("sony", "apple"), function(i) gtrends(keyword=i, time="now 1-H"))

使用l[[1]]l[[2]]访问数据。

head(l[[1]])
#                  date hits keyword   geo gprop category
# 1 2019-04-21 09:14:00   74    sony world   web        0
# 2 2019-04-21 09:15:00   72    sony world   web        0
# 3 2019-04-21 09:16:00   75    sony world   web        0
# 4 2019-04-21 09:17:00   84    sony world   web        0
# 5 2019-04-21 09:18:00   78    sony world   web        0
# 6 2019-04-21 09:19:00   83    sony world   web        0

head(l[[2]])
# location hits keyword   geo gprop
# 1 Falkland Islands (Islas Malvinas)   NA    sony world   web
# 2            São Tomé & Príncipe   NA    sony world   web
# 3                        Seychelles   NA    sony world   web
# 4                 St. Kitts & Nevis   NA    sony world   web
# 5                         Hong Kong  100    sony world   web
# 6                             Nepal   84    sony world   web

答案 1 :(得分:0)

以下是我认为可以为您提供所需内容的几种方法。

library(gtrendsR)

a = c("sony","apple")

第一种方法:使用base R

gtrends_interest <- function(keyword) gtrends(keyword = keyword, time = "now 1-H")[["interest_over_time"]]
trends_data <- do.call('rbind', lapply(a, gtrends_interest))

第二种方式:使用purrr

library(purrr)
trends_data2 <- a %>%
  map_df( ~ gtrends(keyword = ., time = "now 1-H")[["interest_over_time"]])

这两个方法将从堆叠的data.frame中的每个元素中返回一个interest_over_time的{​​{1}}。

我更喜欢第二种,因为一旦掌握了a就会变得非常强大。