【问题标题】:Convert a data read in by fread function to data.frame将 fread 函数读入的数据转换为 data.frame
【发布时间】:2016-01-13 09:11:36
【问题描述】:

假设我有一个包含 3 行和 4 列的示例 csv 文件。假设它如下所示:

name1 name2  name3 name4
11    12     13    14
21    22     23    24
31    32     33    34

我使用fread() 阅读它(我使用小样本进行说明):

data <- fread(sample.csv, stringsAsFactors=FALSE)

那我做

class(data)

它会返回

[1] "data.table" "data.frame"

我想看第四列的第一个元素,我试过了

data[1,4]

但它返回 4(我猜这是列的索引)。

有趣的是,当我调用以下代码时

data[1,] 

data[1]

它返回第一行。

原来如此

data <- data.frame(data)

将数据转换为数据框。

我的问题:
1. 由于初始数据有两个类,有没有办法让我选择一个类并“删除”另一个类?就我而言,我只想将数据用作数据框。
2. 一般情况下,如果数据有多个类,我们可以选择一个类来保留吗?例如,as.POSIXct() 将返回一个具有两个类(“POSIXct”“POSIXt”)的对象。如果我们只想保留其中一个类怎么办?任何函数都以通用方式用于此目的?

【问题讨论】:

  • 您可以在fread() 中获取带有data.table = FALSE 的常规数据框。其他函数是class&lt;-()oldClass()unclass()help(class) 等。但您可能不想从日期时间中删除POSIXt,因为它可能会产生意想不到的后果
  • 解决得很好。谢谢。
  • 不管怎样,data[1,4] 将在 data.table 的未来迭代中表现得如您所愿。

标签: r class data.table fread


【解决方案1】:

如果您想使用 fread 并希望将数据作为数据框获取,只需将 data.table 的属性设置为 FALSE。默认为真。

默认为data.table。一个data.frame当参数data.table=FALSE;

例如

options(datatable.fread.datatable=FALSE).

请参阅 R fread 的文档以供参考。 https://www.rdocumentation.org/packages/data.table/versions/1.10.4-2/topics/fread

【讨论】:

  • 或者只是,正如你所暗示但​​没有明确输入的,fread("file.csv", data.table=FALSE)
【解决方案2】:
data <- read.csv(sample.csv, stringsAsFactors=FALSE)

使用read.csv()直接获取csv作为data.frame。

如果你使用data[1,4],你应该输出14。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 2011-01-05
    • 2021-11-26
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多