【问题标题】:Extract names of the levels of a factor [duplicate]提取因子水平的名称[重复]
【发布时间】:2016-05-25 08:31:06
【问题描述】:

我正在尝试在 R 中读取一个巨大的矩阵(2.8gb),因此,到目前为止,我发现的最好的是

 require(data.table)

 DT<-fread("bigmatrix.csv")

我几乎一无所知!

之后我可以告诉你,这个矩阵有 3 列和 5000 万行。

每一行都是类型

             object1                       object 2           distance
 1: Kho.CENTRAL_KHOISAN.GWI           Kho.CENTRAL_KHOISAN.GWI 0.0000000
 2: Kho.CENTRAL_KHOISAN.GWI         Kho.CENTRAL_KHOISAN.GXANA 0.2195843  
 3: Kho.CENTRAL_KHOISAN.GWI Kho.CENTRAL_KHOISAN.KHOEKHOEGOWAB 0.6749363
 4: Kho.CENTRAL_KHOISAN.GWI          Kho.CENTRAL_KHOISAN.KHWE 0.6089206
 5: Kho.CENTRAL_KHOISAN.GWI        Kho.CENTRAL_KHOISAN.KORANA 0.7163111
 6: Kho.CENTRAL_KHOISAN.GWI         Kho.CENTRAL_KHOISAN.KWADI 0.8017179

所以它对大约 6900 个对象成对比较 2 个对象的距离

现在我的问题来了:

我想提取 41 个对象的成对比较。但是我不知道给我这个数据集的人是怎么称呼这 41 个对象的!!

所以我的解决方案是找到 DT$object1 的级别,将它们写入一个文件,然后扫描它们以找到我需要的 41,我该怎么做?

我试过了

foo<-factor(DT$object1)

所以当我打电话时

foo

....

6895 Levels: AA.BEJA.BEJA AA.BEJA.BEJA_2 AA.BERBER.AWJILAH ... Zun.ZUNI.ZUNI

但是

foo$Levels

给我一​​个错误!

我确信有一种比我在 C++ 中更聪明的方法(即循环遍历每一行,仅当对象 1 的名称不存在时才将其插入字符串向量中),但我该怎么做是吗?


编辑:现在又出现了一个问题:

我已经确定了我需要的 41 个对象,如何从 data.table 中提取与我相关的行?

我可以将对象的名称存储在数据框或向量中

【问题讨论】:

  • read.table() 用于在 R 中导入制表符分隔的数据文件。您必须在开始使用数据之前阅读基础知识。要从数据中提取 41 行,您需要将数据。在adv-r.had.co.nz/Subsetting.html 阅读有关子集的更多信息
  • 要获取唯一值,您可以使用unique(DT$object1)。如果你想让它们排序,你可以sort(unique(DT$object1))

标签: r matrix data.table bigdata


【解决方案1】:

尝试: levels(as.factor(DT$object1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多