我试图在R中读取一个巨大的矩阵(2.8gb),因此,到目前为止,我找到的最好的矩阵是
require(data.table)
DT<-fread("bigmatrix.csv")
我几乎什么都不知道!
在此之后,我能告诉你这个矩阵有3列和50百万行。
每一行都是
类型 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中提取与我相关的行?
我可以将对象的名称存储在数据框或向量
中答案 0 :(得分:5)
尝试:
levels(as.factor(DT$object1))