我有一个带有多个网址的角色向量,每个网址都会托管特定年份的犯罪数据csv。是否有一种简单的方法来创建一个循环,它将read.csv和rbind所有数据帧,而不必运行read.csv 8次? URL的向量在
之下{{1}}
答案 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)