【发布时间】:2020-09-12 16:44:34
【问题描述】:
我有一个来自网络的 CSV URL 列表,并将它们合并到一个向量中。
现在,我想用read_csv 阅读这份清单。
例子:
files <- c("csv_link1.csv",
"csv_link2.csv",
"csv_link3.csv",
and so on....)
data <- map_dfr(files, read_csv)
这没问题。问题是在 CSV 文件中有填充了不同值的列。因此,例如,在 CSV1 中有列“V1”,用 double 填充,而在 CSV 中,同一列是“V1”,用字符填充。无法合并 CSV,因为它们是不同的数据类型。
就我而言,我认为解决这个问题有两种可能性。
- 我只导入某些列,所以我说
read_csv只读取列(V2 和 V3)而不是 V1
或者
- 我将列合并到与
col_types相同的数据类型
我都试过了,但由于语法正确而失败了。
我尝试了类似的东西
data <- map_dfr(files, read_csv(cols_only(the col names)))
但是,这行不通。
如何仅导入和合并特定列?
以我为例:
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>.
所以我的列BbAH 有不同的数据类型。但我不需要这个专栏。
如果由于这种不同的数据类型问题,我可以选择在合并运行出错之前将要合并的列,那就太酷了。
【问题讨论】:
-
您可以尝试为每列创建一个数据类型字典,以便在读取 csv 后,根据该字典将列转换为适当的数据类型。然后你可以合并数据框。
-
嗨@pontilicious,欢迎来到 StackOveflow!要获得更具体的反馈,最好也包括一些您的数据。因此,也许将前两个文件作为自己的数据框导入,然后包含 dput(head(your_datafram_name_here,10)) 的结果以显示数据的前十行?您可以使用问题下方左下方水平菜单上的“编辑”选项将其粘贴到问题中。
-
@Russ Thomas,感谢您的回答。我更新了我的问题。希望它可以正常繁殖。问候:)
-
谢谢@pontilicious。所以你提到你不需要
BbAH列。你能指定你需要哪些列吗? -
@Russ 我只需要列
(Date,Time,HomeTeam,AwayTeam,FTHG,FTAG,FTR)
标签: r dplyr data.table purrr readr