我有一个包含多个社交媒体用户和他/她的粉丝的数据表.原始数据表格式如下:
X.USERID FOLLOWERS
1081 4053807021,2476584389,4713715543, ...
Run Code Online (Sandbox Code Playgroud)
因此,每行包含一个用户以及他/她的ID和一个关注者矢量(用逗号分隔).总共有24,000个唯一身份用户ID和160,000,000个独立粉丝.我希望以下列格式转换原始表:
X.USERID FOLLOWERS
1: 1081 4053807021
2: 1081 2476584389
3: 1081 4713715543
4: 1081 580410695
5: 1081 4827723557
6: 1081 704326016165142528
Run Code Online (Sandbox Code Playgroud)
为了获得这个数据表,我使用了以下代码行(假设我的原始数据表被称为dt):
uf <- dt[,list(FOLLOWERS = unlist(strsplit(x = FOLLOWERS, split= ','))), by = X.USERID]
Run Code Online (Sandbox Code Playgroud)
但是,当我在整个数据集上运行此代码时,我收到以下错误:
不允许负长度向量
根据这篇关于堆栈溢出的帖子(不正确使用set后data.table中的行数为负数),似乎我碰到了data.table中列的内存限制.作为一种解决方法,我以较小的块(每10,000个)运行代码,这似乎有效.
我的问题是:如果我改变我的代码,我可以防止这个错误发生或我是否碰到R的限制?
PS.我有一台140GB RAM的机器,所以物理内存空间应该不是问题.
> memory.limit()
[1] 147446
Run Code Online (Sandbox Code Playgroud)