将大型 csv 加载到数据框中,同时保持列结构
Load large csv's into dataframe while maintaining column structure
我正在尝试将一个大文件文件夹(总共 3500 万行)加载到 R 中并将其作为数据框。
我已经成功地加载了数据,尽管使用下面的代码确实需要 10/15 分钟,但是,问题是 csv 中的所有列都变成了 1 列。这是我的代码:
# Load files
temp = list.files(path ="D:/", pattern="*.csv", full.names = TRUE)
myfiles = lapply(temp, read.delim)
# Make Dataframe
df_list = lapply(seq(length(myfiles)),function(i){
df = as.data.frame(myfiles[i], stringsAsFactors = FALSE)
})
head(do.call(bind_rows,df_list))
df = as.data.frame(data.table::rbindlist(df_list, use.names=TRUE, fill=TRUE))
csv 的列可能如下所示:
|A|B|C|D1|E|
但是在我的数据框中输出如下:
|A.B.C.D1..E|
任何解决此维护列问题的帮助都将被应用。
您可以使用 fread()
更快地读取 csv 并使用 rbindlist()
合并列表中的数据。两者都来自 data.table
包。
library(data.table)
# Load files
temp = list.files(path ="D:/", pattern="*.csv", full.names = TRUE)
使用fread()
代替read.delim()
:
myfiles = lapply(temp, fread)
由于没有提供可重现的数据:
df_list <- lapply(1:5, function(x) {
set.seed(x)
rows <- sample(1:32, 2)
mtcars[rows, ]
})
合并列表中的数据:
df <- rbindlist(df_list)
这是结果:
mpg cyl disp hp drat wt qsec vs am gear carb
1: 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
2: 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
3: 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
4: 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
5: 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
6: 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
7: 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
8: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
9: 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
10: 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
我正在尝试将一个大文件文件夹(总共 3500 万行)加载到 R 中并将其作为数据框。
我已经成功地加载了数据,尽管使用下面的代码确实需要 10/15 分钟,但是,问题是 csv 中的所有列都变成了 1 列。这是我的代码:
# Load files
temp = list.files(path ="D:/", pattern="*.csv", full.names = TRUE)
myfiles = lapply(temp, read.delim)
# Make Dataframe
df_list = lapply(seq(length(myfiles)),function(i){
df = as.data.frame(myfiles[i], stringsAsFactors = FALSE)
})
head(do.call(bind_rows,df_list))
df = as.data.frame(data.table::rbindlist(df_list, use.names=TRUE, fill=TRUE))
csv 的列可能如下所示:
|A|B|C|D1|E|
但是在我的数据框中输出如下:
|A.B.C.D1..E|
任何解决此维护列问题的帮助都将被应用。
您可以使用 fread()
更快地读取 csv 并使用 rbindlist()
合并列表中的数据。两者都来自 data.table
包。
library(data.table)
# Load files
temp = list.files(path ="D:/", pattern="*.csv", full.names = TRUE)
使用fread()
代替read.delim()
:
myfiles = lapply(temp, fread)
由于没有提供可重现的数据:
df_list <- lapply(1:5, function(x) {
set.seed(x)
rows <- sample(1:32, 2)
mtcars[rows, ]
})
合并列表中的数据:
df <- rbindlist(df_list)
这是结果:
mpg cyl disp hp drat wt qsec vs am gear carb
1: 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
2: 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
3: 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
4: 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
5: 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
6: 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
7: 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
8: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
9: 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
10: 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2