Создание разреженной матрицы в R - PullRequest
0 голосов
/ 06 июля 2018

У меня есть фрейм данных Likes для n пользователей и m лайков, с userid и likeid1 : likeidm в качестве моих переменных. Конкретные идентификаторы пользователей хранятся в столбце 1 ( Likes $ userid ), а ячейки содержат 1 или 0 в зависимости от того, понравилась ли пользователю страница с соответствующим идентификатором или нет.

library(Matrix)

Likes <- data.frame(userid=c("n1","n2"),
                      m1=c(0,1),
                      m2=c(0,0),
                      m3=c(0,0),
                      m4=c(1,0)
                      )

Likes [1,1:5]

  userid       m1          m2          m3          m4
1 n1           0           0           0           1

Теперь я хочу создать разреженную матрицу. Как бы я указал J в следующем коде? Я знаю, что это неправильно, потому что технически подобные идентификаторы не находятся в столбце, но уже определены как переменные в моем фрейме данных.

sM_Likes <- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)

Заранее спасибо (и прошу прощения за самый основной вопрос).

1 Ответ

0 голосов
/ 06 июля 2018

Я попытался воспроизвести проблему, создав объект, подобный описанному в вопросе (который я сейчас отредактировал в вопросе), и добавив к нему несколько дополнительных фальшивых строк.

library(Matrix)

Likes <- data.frame(userid=c("n1","n2"),
                      m1=c(0,1),
                      m2=c(0,0),
                      m3=c(0,0),
                      m4=c(1,0)
                      )

Iобнаружил, что запуск вашего кода на этом выдал другую ошибку:

sM_Likes <- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)

Ошибка в sparseMatrix (Likes, i = likes $ userid, j = 1, c (2: ncol (Likes)),: точно один из 'i', 'j' или 'p' должен отсутствовать в вызове

Я упоминал об этом пару раз в комментариях как то, что, как я думал, вызывало проблему. Выисправил спецификацию вашего аргумента j, и теперь он работает:)

В комментариях к именам столбцов вы также задали дополнительный вопрос.Я думаю, что это должно решить, что:

devtools::install_github("ben519/mltools")
require(mltools)
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)
)

sparsify(dt)
sparsify(dt, sparsifyNAs=TRUE)
sparsify(dt[, list(realCol)], naCols="identify")
sparsify(dt[, list(realCol)], naCols="efficient")
...