循环抓取的数据以将数据存储在 R 中的数据框中

Posted

技术标签:

【中文标题】循环抓取的数据以将数据存储在 R 中的数据框中【英文标题】:Loop over the scraped data to store the data in dataframe in R 【发布时间】:2020-06-12 07:06:37 【问题描述】:

我是 R 新手,目前正在尝试从网络上抓取一些数据。问题是我希望每五分钟运行一次代码,并在每次运行后将数据存储在数据框中。所有抓取的数据都应该存储在同一个数据框中。

示例: 网站上有生产数据,我想把它们刮到R:

A1      A2
100     200

这些数据每 5 分钟更新一次。我想要的是每次更新(或代码运行)时,都会将新数据附加到同一个数据帧中。

Result I want:
A1      A2     Time
100     200    28/02/2020 15:45:45
A1      A2     Time
103     199    28/02/2020 15:50:45
A1      A2     Time
90      194    28/02/2020 15:55:45 
……….

目前我只得到了每次运行代码时都会覆盖结果的代码。我现在的代码如下所示:

library(rvest)
library(xml2)
library(plyr)

url <- "myurl"
content <- read_html(url)
dfNEW = data.frame()
Result <- content %>%
  html_node("#gauge")                         %>% 
  html_attrs()                                %>%
  `[`(c("dataA1", "dataA2"))
df <- as.data.frame(t(Result))
rownames(df) <- c()
df$Time <- Sys.time()

total <- rbind.fill(dfNEW, df)

你知道如何让循环做我想做的事吗?

提前致谢!

【问题讨论】:

你可能想看看这个:***.com/questions/1174799/…。在循环结束时,告诉等待 5 分钟。 谢谢!但我的问题更多是关于每次运行代码时如何将新数据附加到数据帧。 最后一行应该是每 5 分钟更新一次最终数据帧,而不是创建一个新数据帧。比如:total &lt;- rbind.fill(total, dfNEW)total data.frame 需要先初始化,在循环过程之前。 【参考方案1】:

一个循环可能如下所示:

dfNEW <- data.frame()

for(i in seq(100)

  # code to generate new df
  df <- as.data.frame(t(Result))
  rownames(df) <- c()
  df$Time <- Sys.time()
  dfNEW <- rbind.fill(dfNEW, df)

  Sys.sleep(5*60)
  

因此,您必须将每个循环中的 data.frame 的新行绑定到已经存在的行。

【讨论】:

以上是关于循环抓取的数据以将数据存储在 R 中的数据框中的主要内容,如果未能解决你的问题,请参考以下文章

在R中顺序计算列的中位数并将值存储在数据框中

编写一个 R 脚本来计算数据框中的平均值

如何使用 selectInput 从 R 中的数据框中选择特定列?

如何将系数值从逻辑回归中提取到 R 中的数据框中? [复制]

循环子集,获取文件并将结果保存在数据框中

如何删除数据框中的回车符