R:仅导入和合并特定列

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) 但是

我有一个来自网络的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)
但是,这不起作用

如何仅导入和合并特定列

我的具体例子如下:

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(如字符))