我有一个包含多个社交媒体用户和他/她的粉丝的数据表.原始数据表格式如下:
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) 我试图合并两个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) 假设您有一个包含大量列的数据框(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)
但是这种方法仍然创造了这个临时大矩阵,这需要大量的时间和内存,因此我要求直接的方法(如果有的话).
您好我在维度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.
谢谢你的时间.