循环以从多个URL创建一个数据框

时间:2017-07-13 14:19:09

标签: r csv tidyverse

我有一个带有多个网址的角色向量,每个网址都会托管特定年份的犯罪数据csv。是否有一种简单的方法来创建一个循环,它将read.csv和rbind所有数据帧,而不必运行read.csv 8次? URL的向量在

之下
{{1}}

3 个答案:

答案 0 :(得分:4)

map_dfr包中的函数purrr完全符合您的要求。它将一个函数应用于输入的每个元素(在本例中为urls),并将结果按行绑定在一起。

library(tidyverse)
map_dfr(urls, read_csv)

我出于个人偏好使用read_csv()代替read.csv(),但两者都有效。

答案 1 :(得分:3)

在基地R:

result <- lapply(urls, read.csv, stringsAsFactors = FALSE)
result <- do.call(rbind, result)

答案 2 :(得分:1)

我通常采用这种方法,因为我想单独保存所有csv文件以防万一我需要对它们进行进一步的分析。否则,您不需要for循环。

for (i in 1:length(urls)) assign(paste0("mycsv-",i), read.csv(url(urls[i]), header = T))

df.list <- mget(ls(pattern = "mycsv-*"))

#use plyr if different column names and need to know which row comes from which csv file
library(plyr)
df <- ldply(df.list) #you can remove first column if you wish

#Alternative solution in base R instead of using plyr
#if they have same column names and you only want rbind then you can do this:
df <- do.call("rbind", df.list)