之前我曾尝试过问过这个问题,但在提供数据方面有点草率和混乱。有关上下文,请参阅Importing fread vs read.table and errors。
我想从一堆.csv文件中选择一些列并将它们绑定在一起。由于这些.csv文件非常大,因此无法完全导入文件。
我尝试使用第1,2,3,25和29列的以下代码执行此操作:
my.files <- list.files(pattern=".csv")
my.data <- lapply(my.files,fread, header = FALSE, sep=",", select = c(1,2,3,25,29))
df <- do.call("rbind", my.data)
然而,使用fread
使得结果数据文件由字符组成,从而无法创建好的图形。我尝试将character
数据转换为numeric
(请参阅上下文链接),但这也没有用。
在其中一个文件上使用read.table
而不是fread
时,会正确读取数据。因此,我想创建一段与fread
代码相同但与read.table
相同的代码。我尝试了以下代码,但这不起作用。
my.files <- list.files(pattern=".csv")
my.data <- lapply(my.files,read.table, header = FALSE, sep=",", colClasses = c(1,2,3,25,29))
df <- do.call("rbind", my.data)
如何使用read.table读取.csv文件的特定列并将它们绑定在一起,同时避免读取完整的文件?
答案 0 :(得分:0)
colClasses使用定义期望类的向量。 如果要跳过列,请使用“NULL”。
例如:
<pre>
<label posn="0 -0 0.04" sizen="24 2" scale="0.8" text="Weekly Challenge:">
<label posn="0 -2.5 0.04" sizen="28 2" scale="0.8" textcolor="FF0" text="Drive the MOST time on the server!">
<label posn="0 -5.1 0.04" sizen="32 2" textsize="0.8" text="***the time what you spend with driving are counted"></label>
</label>
</label>
</pre>
bool(false)
bool(true)
bool(true)
bool(true)
Now: 2018-02-03 18:02:26<br>
$start_datemostfinishedweekly: 2018-02-09 16:00:00<br>
$expiresmostfinishedweekly: 2018-02-16 16:00:00<br>
$start_dateplaytimeweekly: 2018-02-02 16:00:00<br>
$expireshetiplaytimeweekly: 2018-02-09 16:00:00<br>
在这种情况下,第1列和第3列设置为字符,第2列被跳过。
答案 1 :(得分:0)
首先通过查看第一个文件的第一行来确定文件中的列数nc
。使用nc
设置colClasses
向量,该向量应包含所有"NULL"
值,但所需的列除外NA
。然后使用我们计算的colClasses
向量和rbind
生成的数据框一起读取文件。
nc <- ncol(read.csv(my.files[1], header = FALSE, nrows = 1))
colClasses <- replace(rep("NULL", nc), c(1:3, 25, 29), NA)
my.data <- lapply(my.files, read.csv, header = FALSE, colClasses = colClasses)
do.call("rbind", my.data)