我正在尝试读取R中的一个巨大矩阵(2.8gb),因此,到目前为止,我发现的最好结果是
require(data.table)
DT<-fread("bigmatrix.csv")
Run Code Online (Sandbox Code Playgroud)
其中我几乎一无所知!
之后,我可以告诉您该矩阵有3列和5千万行。
每行的类型
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
Run Code Online (Sandbox Code Playgroud)
因此,它将两个对象的距离成对比较大约6900个对象
现在是我的问题:
我只想对41个对象进行成对比较。但是我不知道给我这个数据集的那个家伙怎么称这41个对象!
因此,我的解决方案是找到DT $ object1的级别,将其写入文件中,然后对其进行扫描以找到所需的41,该怎么办?
我试过了
foo<-factor(DT$object1)
Run Code Online (Sandbox Code Playgroud)
所以当我打电话
foo
....
6895 Levels: AA.BEJA.BEJA AA.BEJA.BEJA_2 AA.BERBER.AWJILAH ... Zun.ZUNI.ZUNI
Run Code Online (Sandbox Code Playgroud)
但
foo$Levels
Run Code Online (Sandbox Code Playgroud)
给我一个错误!
我敢肯定,有一种比C ++更聪明的方法(即循环遍历每行,仅在尚不存在的情况下将对象1的名称插入字符串向量中),但是我该怎么做?
编辑:现在出现另一个问题:
我已经确定了需要的41个对象,如何从data.table中提取与我相关的行?
我可以将对象的名称存储在数据框或向量中