【问题标题】:Importing multiple CSV files into R via HTTPS based on list [duplicate]基于列表通过HTTPS将多个CSV文件导入R [重复]
【发布时间】:2018-07-06 04:27:08
【问题描述】:

我看到过有关导入 CSV 的类似帖子,但没有基于列表的文件类型具有相似名称的导入。我想编写一个遍历名称列表并导入每个 CSV 的循环。

我有一个包含 500 个 CSV 的列表,位于我想导入 R 的网站上。每个文件都有一个相似的 URL。例如,其中 5 个 URL 可能看起来像:

https://www.website.com/datasets/Dog/1234.csv
https://www.website.com/datasets/Cat/1234.csv
https://www.website.com/datasets/Turtle/1234.csv
https://www.website.com/datasets/Bird/1234.csv
https://www.website.com/datasets/Cow/1234.csv

实际的 CSV 数据如下所示:

Date,Open,High,Low,2018-01-25,174.505,174.95,170.53

前四项是列名。

URL 中唯一改变的部分是动物的名字。我在一个单独的 XLS 文件中有 500 只动物的列表。

我知道如何将单个 CSV 文件导入单个数据框:

Dog<-read.csv('https://www.website.com/datasets/Dog/1234.csv')

但是,如何根据单独的 XLS 文件中的动物列表将它们一次全部导入到一个 CSV 文件中?我在想我可以将动物列表保存为一个单独的变量,然后循环遍历列表,但我被困在那里:

List <- as.character( read.csv (https://www.website.com/datasets/AnimalList/1234.csv', stringsAsFactors = FALSE, header = FALSE))

对于 5 只动物,最终数据框应如下所示,列名为 Date、Open、High、Low 和 Animal。

Date    Open    High    Low Animal
018-01-17   156 111 196 Dog
018-01-18   133 153 112 Dog
018-01-19   194 182 117 Dog
018-01-20   199 158 109 Dog
018-01-21   137 151 145 Dog
018-01-22   164 192 141 Dog
018-01-23   152 113 128 Dog
018-01-24   125 114 175 Dog
018-01-25   152 132 112 Dog
018-01-26   149 125 139 Dog
018-01-17   118 128 134 Cat
018-01-18   168 136 107 Cat
018-01-19   187 150 185 Cat
018-01-20   122 178 190 Cat
018-01-21   112 186 169 Cat
018-01-22   120 192 189 Cat
018-01-23   134 149 106 Cat
018-01-24   195 172 172 Cat
018-01-25   192 162 113 Cat
018-01-26   198 170 118 Cat
018-01-17   160 188 129 Turtle
018-01-18   100 111 129 Turtle
018-01-19   165 101 145 Turtle
018-01-20   200 130 174 Turtle
018-01-21   130 113 130 Turtle
018-01-22   189 101 169 Turtle
018-01-23   185 146 104 Turtle
018-01-24   126 177 102 Turtle
018-01-25   143 102 167 Turtle
018-01-26   107 168 151 Turtle
018-01-17   193 121 169 Bird
018-01-18   148 134 164 Bird
018-01-19   199 192 106 Bird
018-01-20   138 160 124 Bird
018-01-21   105 140 161 Bird
018-01-22   182 170 185 Bird
018-01-23   119 171 172 Bird
018-01-24   154 115 130 Bird
018-01-25   104 105 158 Bird
018-01-26   100 153 169 Bird
018-01-17   191 192 187 Cow
018-01-18   187 128 107 Cow
018-01-19   198 135 114 Cow
018-01-20   170 110 185 Cow
018-01-21   141 119 112 Cow
018-01-22   173 159 173 Cow
018-01-23   139 186 155 Cow
018-01-24   169 178 172 Cow
018-01-25   101 149 155 Cow
018-01-26   157 178 161 Cow

【问题讨论】:

    标签: r loops csv for-loop import


    【解决方案1】:

    您可以使用purrr 循环遍历每个文件名,使用map_df 获取每次迭代的结果并将它们绑定到数据框中。

    准备所有名字

    library(tidyverse)
    
    #all animal names
    animal.names <- c("Dog", "Cat", "Turtle", "Bird", "Cow")
    

    为 map_df 创建基本函数

    • 根据名称创建网址
    • 通过url路径读入csv
    • 将动物名称添加为 id 列
    • 继续下一个动物档案

    功能:

    scrape_csv <- function(animal.names){
      #create urls
      animal.urls <- paste0("https://www.website.com/datasets/",animal.names,"/1234.csv")
      #read in file
      df <- read_csv( as.character(animal.urls) )
      #add animal name as col
      df$Animal <- animal.names
      return(df)
    }
    

    将每个名称映射到函数并存储结果:

    df_results <- animal.names %>% map_df( scrape_csv )
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2014-07-20
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多