如何使用 for 循环变量作为 csv 文件名的一部分来编写许多 csv 文件?
How to use for loop variable to use as part of csv file names for writing many csv files?
在 R 中,我正在研究网络抓取(使用 rvest)曲棍球草稿历史页面,我创建了一个 for 循环来遍历 40 个网页,抓取 table 然后我想写每个到一个单独的 csv 文件。在我的循环中,我循环了几年并用 url 粘贴它们以转到每个 url。我如何使用每个 url 中使用的年份也作为 csv 文件名(例如 1979.csv、1980.csv、...)。
当我尝试使用时:
write_csv(export, path = paste0("~/hockey_draft/csv/1979.csv"))
这给了我一个名称为 1979.csv 的 csv 文件。我相信我必须使用 paste0()
并使用 for 循环中的 i 但它似乎不起作用。
代码
library(tidyverse)
library(rvest)
year <- list(1979:2018)
new_list <- NULL
For循环:
for (i in year) {
new_list <- c(new_list, paste("https://www.hockey-reference.com/draft/NHL_",i,"_entry.html", sep = ""))
for (y in new_list) {
url <- as.character(y)
export <- url %>% read_html() %>% html_nodes("table") %>% .[[1]] %>% html_table()
# Write to csv file
write_csv(export, path = paste0("~/hockey_draft/csv/",i,".csv"))
}
}
我希望获得从 1979 年到 2018 年的 40 个 csv 文件。
在这种情况下您不需要使用 list
。您还可以使用函数 paste
一次创建所有 url 而无需循环。这是一种做你想做的事情的方法:
library(rvest)
year <- 1979:2018
urls <- paste0("https://www.hockey-reference.com/draft/NHL_", year, "_entry.html")
for (i in 1:length(urls)){
export <- urls[i] %>% read_html() %>% html_nodes("table") %>% .[[1]] %>% html_table()
write.csv(x = export, file = paste0("~/hockey_draft/csv/", year[i],".csv"))
}
希望有用。
在 R 中,我正在研究网络抓取(使用 rvest)曲棍球草稿历史页面,我创建了一个 for 循环来遍历 40 个网页,抓取 table 然后我想写每个到一个单独的 csv 文件。在我的循环中,我循环了几年并用 url 粘贴它们以转到每个 url。我如何使用每个 url 中使用的年份也作为 csv 文件名(例如 1979.csv、1980.csv、...)。
当我尝试使用时:
write_csv(export, path = paste0("~/hockey_draft/csv/1979.csv"))
这给了我一个名称为 1979.csv 的 csv 文件。我相信我必须使用 paste0()
并使用 for 循环中的 i 但它似乎不起作用。
代码
library(tidyverse)
library(rvest)
year <- list(1979:2018)
new_list <- NULL
For循环:
for (i in year) {
new_list <- c(new_list, paste("https://www.hockey-reference.com/draft/NHL_",i,"_entry.html", sep = ""))
for (y in new_list) {
url <- as.character(y)
export <- url %>% read_html() %>% html_nodes("table") %>% .[[1]] %>% html_table()
# Write to csv file
write_csv(export, path = paste0("~/hockey_draft/csv/",i,".csv"))
}
}
我希望获得从 1979 年到 2018 年的 40 个 csv 文件。
在这种情况下您不需要使用 list
。您还可以使用函数 paste
一次创建所有 url 而无需循环。这是一种做你想做的事情的方法:
library(rvest)
year <- 1979:2018
urls <- paste0("https://www.hockey-reference.com/draft/NHL_", year, "_entry.html")
for (i in 1:length(urls)){
export <- urls[i] %>% read_html() %>% html_nodes("table") %>% .[[1]] %>% html_table()
write.csv(x = export, file = paste0("~/hockey_draft/csv/", year[i],".csv"))
}
希望有用。