Mar*_*ová 2 r matrix data.table
我正在尝试用矩阵替换NA  - mat- 用零.我正在使用mat[is.na(mat)] <- 0.当我有8945个变量或更小变量的94531观测矩阵时效果很好但我在112039个22752个变量的观测矩阵上尝试它,R表示错误:
if(!nreplace)返回错误(x):缺少值需要TRUE/FALSE
另外:警告消息:
总和(i,na.rm = TRUE):整数溢出 - 使用sum(as.numeric(.))
我不知道我做错了什么,我不明白错误.
这是我的数据结构的一个例子.
small data.matrix :(由真实数据源制作)
> str(mat)
Classes 'data.table' and 'data.frame':  94531 obs. of  18946 variables:
 $ 6316506: num  1 0 NA NA NA NA NA NA NA NA ...
 $ 6794602: num  0 1 NA NA NA NA NA 0 0 0 ...
 $ 1008667: num  NA NA 0 1 0 NA NA 0 0 0 ...
 $ 6312454: num  NA NA 1 0 0 NA NA 0 0 0 ...
 $ 8009082: num  NA NA 0 0 1 NA NA NA NA NA ...
 $ 1023293: num  NA NA NA NA NA 1 NA NA NA NA ...
 $ 6740421: num  NA NA NA NA NA 1 NA 0 0 0 ...
 $ 6777805: num  NA NA NA NA NA NA 1 NA NA NA ...
 $ 1000558: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ 1001682: num  NA NA NA NA NA NA NA 0 0 0 ...
更大的外观完全一样.
其他问题:
有什么方法如何使用rbindlist(data, fill=T)和填充零而不是NA?
对于大型data.table,该set函数通常是在变量中进行替换的方法.
在此应用程序中,您可以分两步获得所需的结果.
set函数替换值.我构建了一个data.table作为可重现的例子.
set.seed(1234)
dt <- data.table(matrix(sample(c(NA, rnorm(4)), replace=TRUE, 50), 10))
This looks like
dt
            V1         V2         V3         V4         V5
 1:  1.0844412         NA -2.3456977 -2.3456977 -1.2070657
 2:  0.2774292 -1.2070657         NA -2.3456977  1.0844412
 3:  1.0844412 -1.2070657  0.2774292  0.2774292         NA
 4:  0.2774292 -1.2070657 -1.2070657  1.0844412 -1.2070657
 5: -1.2070657         NA -1.2070657 -1.2070657  1.0844412
 6: -2.3456977         NA  0.2774292  1.0844412  0.2774292
 7: -1.2070657 -1.2070657         NA -1.2070657         NA
 8: -2.3456977 -2.3456977  1.0844412  0.2774292  0.2774292
 9: -1.2070657  0.2774292 -1.2070657  1.0844412  0.2774292
10: -1.2070657 -2.3456977 -1.2070657  0.2774292  1.0844412
第一步是找到每列的NA.
myNAs <- lapply(dt, function(x) which(is.na(x)))
接下来,使用for循环迭代列并set在检查列包含缺失值后使用超高效函数填充NA值if.
for(j in seq_along(dt)) if(length(myNAs[[j]]) > 0) set(dt, myNAs[[j]], j, 0)
set 执行替换"就地"(没有任何副本),因此在此操作之后,data.table dt将前NAs替换为0.
dt
            V1         V2         V3         V4         V5
 1:  1.0844412  0.0000000 -2.3456977 -2.3456977 -1.2070657
 2:  0.2774292 -1.2070657  0.0000000 -2.3456977  1.0844412
 3:  1.0844412 -1.2070657  0.2774292  0.2774292  0.0000000
 4:  0.2774292 -1.2070657 -1.2070657  1.0844412 -1.2070657
 5: -1.2070657  0.0000000 -1.2070657 -1.2070657  1.0844412
 6: -2.3456977  0.0000000  0.2774292  1.0844412  0.2774292
 7: -1.2070657 -1.2070657  0.0000000 -1.2070657  0.0000000
 8: -2.3456977 -2.3456977  1.0844412  0.2774292  0.2774292
 9: -1.2070657  0.2774292 -1.2070657  1.0844412  0.2774292
10: -1.2070657 -2.3456977 -1.2070657  0.2774292  1.0844412
| 归档时间: | 
 | 
| 查看次数: | 479 次 | 
| 最近记录: |