Я делаю это все время, и это боль в прикладе, поэтому я написал метод для него под названием sparsify() в моей R-упаковке - mltools. Он работает на data.table
s, которые просто причудливые data.frames
.
Чтобы решить конкретную проблему ...
Установите mltools (или просто скопировать метод sparsify() в вашей среде)
Загружайте пакеты
library(data.table)
library(Matrix)
library(mltools)
Sparsify
x <- data.table(x) # convert x to a data.table
sparseM <- sparsify(x[, !"name"]) # sparsify everything except the name column
rownames(sparseM) <- x$name # set the rownames
> sparseM
3 x 3 sparse Matrix of class "dgCMatrix"
factor_1 factor_2 factor_3
ABC 1 . .
DEF . 1 .
GHI . . 1
В целом, метод sparsify() является довольно гибким. Вот несколько примеров того, как вы можете использовать его:
Сделайте некоторые данные.Типы Примечание данные и неиспользуемые уровни фактора
dt <- data.table(
intCol=c(1L, NA_integer_, 3L, 0L),
realCol=c(NA, 2, NA, NA),
logCol=c(TRUE, FALSE, TRUE, FALSE),
ofCol=factor(c("a", "b", NA, "b"), levels=c("a", "b", "c"), ordered=TRUE),
ufCol=factor(c("a", NA, "c", "b"), ordered=FALSE)
)
> dt
intCol realCol logCol ofCol ufCol
1: 1 NA TRUE a a
2: NA 2 FALSE b NA
3: 3 NA TRUE NA c
4: 0 NA FALSE b b
Out-Of-The-Box Использование
> sparsify(dt)
4 x 7 sparse Matrix of class "dgCMatrix"
intCol realCol logCol ofCol ufCol_a ufCol_b ufCol_c
[1,] 1 NA 1 1 1 . .
[2,] NA 2 . 2 NA NA NA
[3,] 3 NA 1 NA . . 1
[4,] . NA . 2 . 1 .
Преобразование Nas в 0s и Sparsify Их
> sparsify(dt, sparsifyNAs=TRUE)
4 x 7 sparse Matrix of class "dgCMatrix"
intCol realCol logCol ofCol ufCol_a ufCol_b ufCol_c
[1,] 1 . 1 1 1 . .
[2,] . 2 . 2 . . .
[3,] 3 . 1 . . . 1
[4,] . . . 2 . 1 .
Generate Столбцы, определяющие значения NA
> sparsify(dt[, list(realCol)], naCols="identify")
4 x 2 sparse Matrix of class "dgCMatrix"
realCol_NA realCol
[1,] 1 NA
[2,] . 2
[3,] 1 NA
[4,] 1 NA
Сформировать столбцы, содержащие NA значения В эффективно Большинство памяти
> sparsify(dt[, list(realCol)], naCols="efficient")
4 x 2 sparse Matrix of class "dgCMatrix"
realCol_NotNA realCol
[1,] . NA
[2,] 1 2
[3,] . NA
[4,] . NA
Ваш код не работает для меня. Думаю, это «row.names». – pjvandehaar