【发布时间】:2017-03-12 17:21:09
【问题描述】:
我有一个大数据框,305k 行,有两个键和一个数据列,如下所示:
我正在尝试使用 R 中的以下代码将其转换为稀疏矩阵:
#convert to factors
data$RID = as.factor(data$RID)
data$HID = as.factor(data$HID)
data$VALUE = as.numeric(data$VALUE)
str(data)
#remove nas
data = na.omit(data)
#create sparse matrix
X = with(data,sparseMatrix(i=RID,
j=HID,
x=VALUE,
dimnames=list(levels(RID), levels(HID))))
这会产生以下错误消息:
Error in sparseMatrix(i = RID, j = HID, x = VALUE, dimnames = list(levels(RID), :
NA's in (i,j) are not allowed
In addition: Warning messages:
1: In Ops.factor(i, !(m.i || i1)) : ‘+’ not meaningful for factors
2: In Ops.factor(j, !(m.j || i1)) : ‘+’ not meaningful for factors
我已经删除了 NA,所以我不确定为什么会出现错误 NA? 它还参考了因子中的“+”,但我检查了所有 36k 因子并且那里没有“+”?
有谁知道解决方法是什么?
我在下面提供了前 20 行数据的快照,以便您重现该问题:
"RID" "HID" "VALUE"
"361838" "620631" 76.55
"361838" "620671" 82.61
"361838" "620787" 57.73
"361838" "621146" 58.65
"361838" "637825" 64.15
"361838" "637859" 82.79
"361838" "641254" 50.38
"361838" "642105" 72.88
"361838" "646469" 45.79
"361838" "648400" 82.06
"395855" "301340" -5.12
"395855" "649304" 41.88
"395855" "650324" -30.83
"395855" "657458" 46.47
"395855" "658028" -0.53
"395855" "659504" 28.84
"395855" "660506" 29.03
"395855" "660519" 14.16
"395855" "660521" -38.17
"395855" "660547" 35.45
虽然当我查看这些因素时,我得到以下信息:
> str(data)
'data.frame': 20 obs. of 3 variables:
$ RID : Factor w/ 30608 levels "361838","395855",..: 1 1 1 1 1 1 1 1 1 1 ...
$ HID : Factor w/ 37399 levels "2018","7990",..: 11604 11624 11709 11740 14031 14049 15086 15457 16821 17270 ...
$ VALUE: num 76.5 82.6 57.7 58.6 64.2 ...
【问题讨论】:
-
您能告诉我们
str(data)和str(X)报告的内容吗?如果您提供数据样本,例如dput(head(data, 20))以便我们重现您的问题,这将很有帮助。一种可能性是RID和HID不是因素。 -
请编辑您的问题以包含其他信息,而不是在 cmets 中发布它们。如果您已通过将列转换为因子来更新数据,请同时编辑您的问题以反映您遇到的新错误。展示如何移除 NA 也很有用。
-
我现在已经将 RID 和 HID 转换为因子,并按照第一个建议删除了任何 NA。我已重新编辑问题以显示当前问题和错误
标签: r matrix dataframe sparse-matrix reshape