对.csv文件的特定列使用read.table

时间:2018-02-03 17:36:18

标签: r import

之前我曾尝试过问过这个问题,但在提供数据方面有点草率和混乱。有关上下文,请参阅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文件的特定列并将它们绑定在一起,同时避免读取完整的文件?

2 个答案:

答案 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)