【发布时间】: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