相关疑难解决方法(0)

数据表中的内存限制:不允许使用负长度向量

我有一个包含多个社交媒体用户和他/她的粉丝的数据表.原始数据表格式如下:

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)

r bigdata data.table

14
推荐指数
1
解决办法
5757
查看次数

合并错误:不允许使用负长度向量

我试图合并两个data.frames,它们如下所示:

   GVKEY YEAR coperol     delta     vega firm_related_wealth
1 001045 1992       1  38.88885 17.86943            2998.816
2 001045 1993       1  33.57905 19.19287            2286.418
3 001045 1994       1  48.54719 16.85830            3924.053
4 001045 1995       1 111.46762 38.71565            8550.903
5 001045 1996       1 218.89279 45.59413           17834.921
6 001045 1997       1 415.61461 51.45863           34279.515
Run Code Online (Sandbox Code Playgroud)

   GVKEY YEAR fracdirafter fracdirafterindep twfracdirafter
1 001004 1996         1.00              0.70    1.000000000
2 001004 1997         0.00              0.00    0.000000000
3 001004 1998         0.00              0.00    0.000000000
4 001004 1999         0.00              0.00    0.000000000
5 …
Run Code Online (Sandbox Code Playgroud)

merge r

10
推荐指数
2
解决办法
2万
查看次数

直接在R中的稀疏矩阵中创建虚拟变量集

假设您有一个包含大量列的数据框(1000个因子,每个因子有15个级别).您想创建一个虚拟变量数据集,但由于它太稀疏,您希望以稀疏矩阵格式保留虚拟变量.

我的数据集很大,步骤越少,对我来说就越好.我知道如何做上述步骤; 但我无法直接从初始数据集创建稀疏矩阵,即只有一步而不是两步.有任何想法吗?

编辑:一些评论要求进一步阐述,所以在这里:

其中X是我的原始数据集,包含1000列和50000条记录,每列有15个级别,

步骤1:使用类似代码从原始数据集创建虚拟变量;

# Creating dummy data set with empty values
dummified <- matrix(NA,nrow(X),15*ncol(X))
# Adding values to this data set for each column and each level within columns
for (i in 1:ncol(X)){colFactr <- factor(X[,i],exclude=NULL)
  for (j in 1:l){
    lvl <- levels(colFactr)[j]
    indx <- ((i-1)*l)+j
    dummified[,indx] <- ifelse(colFactr==lvl,1,0)
  }
}
Run Code Online (Sandbox Code Playgroud)

第二步:将巨大的矩阵转换为稀疏矩阵,代码如下;

sparse.dummified <- sparseMatrix(dummified)
Run Code Online (Sandbox Code Playgroud)

但是这种方法仍然创造了这个临时大矩阵,这需要大量的时间和内存,因此我要求直接的方法(如果有的话).

r matrix sparse-matrix r-factor

5
推荐指数
2
解决办法
4552
查看次数

为什么我得到的错误是无法在R中创建更多2 ^ 31个元素的表

您好我在维度8个障碍60变量的R中有一个数据帧记录,缺失的值替换为NA,其他值是单词.

当我尝试将这样的数据帧制成表格时,feeds<-table(record)我得到一个错误说:

Error in table(record) : attempt to make a table with >= 2^31 elements
Run Code Online (Sandbox Code Playgroud)

我的数据框的一些示例元素/结构是

INC - CORP Application Issue    INC - CORP Issue    INC - PC Software Issue
Affected User                   Affected User       Affected User
Attachment                      Attachment          Attachment
Description / Priority          Business Critica..  Configuration Item
Knowledge Search                Client ID           Contact Info
NA                              Description / Pr..  NA                      
Run Code Online (Sandbox Code Playgroud)

我不明白错误,因为数据框中的元素显然甚至不接近2 ^ 31.

谢谢你的时间.

r

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

r ×4

bigdata ×1

data.table ×1

matrix ×1

merge ×1

r-factor ×1

sparse-matrix ×1