R:仅导入和合并特定列
我有一个来自网络的CSV URL列表,并将它们合并到一个向量中。 现在,我想用R:仅导入和合并特定列,r,dplyr,data.table,purrr,readr,R,Dplyr,Data.table,Purrr,Readr,我有一个来自网络的CSV URL列表,并将它们合并到一个向量中。 现在,我想用read\u csv阅读这个列表 例如: files <- c("csv_link1.csv", "csv_link2.csv", "csv_link3.csv", and so on....) data <- map_dfr(files, read_csv) 但是
read\u csv
阅读这个列表
例如:
files <- c("csv_link1.csv",
"csv_link2.csv",
"csv_link3.csv",
and so on....)
data <- map_dfr(files, read_csv)
但是,这不起作用
如何仅导入和合并特定列
我的具体例子如下:
library(data.table)
library(readr)
library(purrr)
files <- c("https://www.football-data.co.uk/mmz4281/1920/EC.csv",
"https://www.football-data.co.uk/mmz4281/1819/EC.csv",
"https://www.football-data.co.uk/mmz4281/1718/EC.csv",
"https://www.football-data.co.uk/mmz4281/1617/EC.csv",
"https://www.football-data.co.uk/mmz4281/1516/EC.csv",
"https://www.football-data.co.uk/mmz4281/1415/EC.csv",
"https://www.football-data.co.uk/mmz4281/1314/EC.csv",
"https://www.football-data.co.uk/mmz4281/1213/EC.csv",
"https://www.football-data.co.uk/mmz4281/1112/EC.csv",
"https://www.football-data.co.uk/mmz4281/1011/EC.csv")
data <- map_dfr(files, read_csv)
Error: Can't combine `BbAH` <character> and `BbAH` <double>.
库(data.table)
图书馆(readr)
图书馆(purrr)
文件这个怎么样:
library(data.table)
library(readr)
rbindlist(lapply(files, read_csv, col_types = "character"))
这会将所有列作为字符导入,因此您需要在合并后将它们转换为您最初想要的内容。这样如何:
library(data.table)
library(readr)
rbindlist(lapply(files, read_csv, col_types = "character"))
这会将所有列导入为字符
,因此您需要在合并后将它们转换为您最初想要的任何列。我们可以在读取CSV后选择所需的列,并使用map\u df
将它们合并
library(tidyverse)
result <- map_df(files, ~read_csv(.x) %>% select(Date,HomeTeam,AwayTeam,FTHG,FTAG,FTR))
库(tidyverse)
结果%选择(日期、主队、AwayTeam、FTHG、FTAG、FTR))
我们可以在阅读CSV后选择所需的列,并使用映射df将它们组合起来
library(tidyverse)
result <- map_df(files, ~read_csv(.x) %>% select(Date,HomeTeam,AwayTeam,FTHG,FTAG,FTR))
库(tidyverse)
结果%选择(日期、主队、AwayTeam、FTHG、FTAG、FTR))
由于您只需要这七个变量,因此可以使用fread
读入这些特定变量,以避免BbAH
变量出现问题
library(data.table)
library(dplyr)
library(purrr)
files <- c("https://www.football-data.co.uk/mmz4281/1920/EC.csv",
"https://www.football-data.co.uk/mmz4281/1819/EC.csv",
"https://www.football-data.co.uk/mmz4281/1718/EC.csv",
"https://www.football-data.co.uk/mmz4281/1617/EC.csv",
"https://www.football-data.co.uk/mmz4281/1516/EC.csv",
"https://www.football-data.co.uk/mmz4281/1415/EC.csv",
"https://www.football-data.co.uk/mmz4281/1314/EC.csv",
"https://www.football-data.co.uk/mmz4281/1213/EC.csv",
"https://www.football-data.co.uk/mmz4281/1112/EC.csv",
"https://www.football-data.co.uk/mmz4281/1011/EC.csv")
# Identify columns you need
myColumns = c("Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR")
# Modified function found in https://stackoverflow.com/a/51348578/8535855
# takes a filename and a vector of columns as input
fread_allfiles <- function(file, columns){
x <- fread(file, select = columns) %>%
select(everything()) #
return(x)
}
df_all <- files %>%
map_df(~ fread_allfiles(.,myColumns))
head(df_all)
然后,如果需要,您可以重新设置日期
和时间
列的格式。在第一个文件中,似乎有任何时间值
?因此,其余部分填写为NA
> str(df_all)
Classes ‘data.table’ and 'data.frame': 5429 obs. of 7 variables:
$ Date : chr "03/08/2019" "03/08/2019" "03/08/2019" "03/08/2019" ...
$ Time : chr "12:30" "15:00" "15:00" "15:00" ...
$ HomeTeam: chr "Stockport" "Aldershot" "Barnet" "Chesterfield" ...
$ AwayTeam: chr "Maidenhead" "Fylde" "Yeovil" "Dover Athletic" ...
$ FTHG : int 0 1 1 1 0 0 1 1 2 1 ...
$ FTAG : int 1 2 0 2 0 2 0 4 2 3 ...
$ FTR : chr "A" "A" "H" "A" ...
- attr(*, ".internal.selfref")=<externalptr>
>str(df_all)
类“data.table”和“data.frame”:5429 obs。共有7个变量:
美元日期:chr“2019年8月3日”“2019年8月3日”“2019年8月3日”“2019年8月3日”。。。
$Time:chr“12:30”“15:00”“15:00”“15:00”。。。
$HomeTeam:chr“斯托克波特”“奥尔德肖特”“巴内特”“切斯特菲尔德”。。。
$AwayTeam:chr“Maidenhead”“Fylde”“Yeovil”“多佛竞技”。。。
$FTHG:int 01 01 01 01 12 1。。。
$FTAG:int 12 0 2 0 2 0 4 2 3。。。
$FTR:chr“A”“A”“H”“A”。。。
-属性(*,“.internal.selfref”)=
由于您只需要这七个变量,因此可以使用fread
读入这些特定变量,以避免BbAH
变量出现问题
library(data.table)
library(dplyr)
library(purrr)
files <- c("https://www.football-data.co.uk/mmz4281/1920/EC.csv",
"https://www.football-data.co.uk/mmz4281/1819/EC.csv",
"https://www.football-data.co.uk/mmz4281/1718/EC.csv",
"https://www.football-data.co.uk/mmz4281/1617/EC.csv",
"https://www.football-data.co.uk/mmz4281/1516/EC.csv",
"https://www.football-data.co.uk/mmz4281/1415/EC.csv",
"https://www.football-data.co.uk/mmz4281/1314/EC.csv",
"https://www.football-data.co.uk/mmz4281/1213/EC.csv",
"https://www.football-data.co.uk/mmz4281/1112/EC.csv",
"https://www.football-data.co.uk/mmz4281/1011/EC.csv")
# Identify columns you need
myColumns = c("Date","Time","HomeTeam","AwayTeam","FTHG","FTAG","FTR")
# Modified function found in https://stackoverflow.com/a/51348578/8535855
# takes a filename and a vector of columns as input
fread_allfiles <- function(file, columns){
x <- fread(file, select = columns) %>%
select(everything()) #
return(x)
}
df_all <- files %>%
map_df(~ fread_allfiles(.,myColumns))
head(df_all)
然后,如果需要,您可以重新设置日期
和时间
列的格式。在第一个文件中,似乎有任何时间值
?因此,其余部分填写为NA
> str(df_all)
Classes ‘data.table’ and 'data.frame': 5429 obs. of 7 variables:
$ Date : chr "03/08/2019" "03/08/2019" "03/08/2019" "03/08/2019" ...
$ Time : chr "12:30" "15:00" "15:00" "15:00" ...
$ HomeTeam: chr "Stockport" "Aldershot" "Barnet" "Chesterfield" ...
$ AwayTeam: chr "Maidenhead" "Fylde" "Yeovil" "Dover Athletic" ...
$ FTHG : int 0 1 1 1 0 0 1 1 2 1 ...
$ FTAG : int 1 2 0 2 0 2 0 4 2 3 ...
$ FTR : chr "A" "A" "H" "A" ...
- attr(*, ".internal.selfref")=<externalptr>
>str(df_all)
类“data.table”和“data.frame”:5429 obs。共有7个变量:
美元日期:chr“2019年8月3日”“2019年8月3日”“2019年8月3日”“2019年8月3日”。。。
$Time:chr“12:30”“15:00”“15:00”“15:00”。。。
$HomeTeam:chr“斯托克波特”“奥尔德肖特”“巴内特”“切斯特菲尔德”。。。
$AwayTeam:chr“Maidenhead”“Fylde”“Yeovil”“多佛竞技”。。。
$FTHG:int 01 01 01 01 12 1。。。
$FTAG:int 12 0 2 0 2 0 4 2 3。。。
$FTR:chr“A”“A”“H”“A”。。。
-属性(*,“.internal.selfref”)=
您可以尝试为每列创建数据类型字典,以便在读取csv后,根据字典将列转换为适当的数据类型。然后你可以合并数据帧。嗨@pontilicious,欢迎来到StackOveflow!为了获得更具体的反馈,最好还包括一些数据。因此,也许可以将前两个文件作为它们自己的数据帧导入,然后包含dput的结果(head(这里是您的_datafram _name _,10))以显示数据的前十行?您可以使用左下角水平菜单上的“编辑”选项将其粘贴到问题下方。@Russ Thomas,谢谢您的回答。我更新了我的问题。希望可以复制。问候:)谢谢@Pontilicous。因此,您提到不需要BbAH
列。您可以指定您需要哪些列吗?@Russ我只需要列(日期、时间、HomeTeam、AwayTeam、FTHG、FTAG、FTR)
您可以尝试为每列创建数据类型字典,以便在读取csv后,根据字典将列转换为适当的数据类型。然后你可以合并数据帧。嗨@pontilicious,欢迎来到StackOveflow!为了获得更具体的反馈,最好还包括一些数据。因此,也许可以将前两个文件作为它们自己的数据帧导入,然后包含dput的结果(head(这里是您的_datafram _name _,10))以显示数据的前十行?您可以使用左下角水平菜单上的“编辑”选项将其粘贴到问题下方。@Russ Thomas,谢谢您的回答。我更新了我的问题。希望可以复制。问候:)谢谢@Pontilicous。因此,您提到不需要BbAH
列。您能指定您需要哪些列吗?@Russ我只需要列(日期、时间、HomeTeam、AwayTeam、FTHG、FTAG、FTR)
然后有一个错误错误:未知快捷方式:h
然后有一个错误错误:未知快捷方式:h
也尝试过这个,但问题是读取csv
遇到错误,因为他无法将季节
和季节
合并。出现此错误后,选择
命令将aborted@pontilicious对于您共享的文件,它不会给我任何错误。如果您需要其他文件,并且存在类型不匹配,则可以将所有文件转换为字符。尝试result%select(Date,HomeTeam,AwayTeam,FTHG,FTAG,FTR)%>%mutate\u all(as.character))
也尝试过这种方法,但问题是read\u csv
遇到错误,因为他无法将季节
和季节
组合在一起。出现此错误后,选择
命令将aborted@pontilicious对于您共享的文件,它不会给我任何错误。如果您需要其他文件,并且存在类型不匹配,则可以将所有文件转换为字符。尝试result%选择(日期、HomeTeam、AwayTeam、FTHG、FTAG、FTR)%>%mutate\u all(如字符))