Я пытаюсь преобразовать некоторые данные в разреженную матрицу.Это выглядит так:
col1 col2
[1,] "5" "LQEMF0072E"
[2,] "3" "KKZZY5914F"
[3,] "4" "UTDLY0947T"
[4,] "4" "QKGTX6135E"
[5,] "1" "FVKVY7432D"
[6,] "1" "RXDLC3097S"
[7,] "1" "OQZKN5913X"
[8,] "2" "XNTHW9334J"
[9,] "5" "AHFFZ7845R"
Итак, у меня есть группы:
1 = group1
2 = group2
3 = group3
4 = group4
5 = group5
Я пытаюсь создать разреженную матрицу, которая будет по существу шириной в 100 столбцов (количество наблюдений / слов) иГлубина 5 строк (количество групп).
group1 0 0 0 0 0 1 0 0 0 0
group2 0 0 1 0 0 0 0 0 0 0
group3 0 0 0 0 0 0 0 0 0 1
etc.
Что-то вроде следующего из пакета rsample
у меня не работает.
sparsedat <- dat %>%
group_by(as.numeric(col1)) %>%
cast_sparse(col2)
ДАННЫЕ:
names <- c("name1", "name2", "name3", "name4")
col1 <- sample(1:5, 100, replace = TRUE)
myFun <- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
col2 <- myFun(100)
col2
dat <- cbind(col1, col2)
dat
РЕДАКТИРОВАНИЕ:
Это мой вывод моих данных, где "col1" - это символьный вектор - group1, group2 ... group 5:
Warning message:
In storage.mode(from) <- "double" : NAs introduced by coercion
[1,] NA 11 . 21 . . 16 9 3 3 1 . . 1 5 . 2 1 2 . . 3 . 3 2 2 1 13 . . . . . . .
[2,] NA 3 6 . . . . . . . . . . . 1 . . . 1 2 . 4 2 . 3 . . . . . . . . . .
[3,] NA . . 20 1 12 2 4 1 . . 3 5 . . 2 1 . . . 2 . . . . . . . . . . . . . .
[4,] NA . . 9 . . 1 1 2 . 2 . . . 27 2 . . . . . 2 . . . . . . 2 1 1 3 1 3 3
[1,] ......
[2,] ......
[3,] ......
[4,] ......
NA создаются путем подачи столбца символов в матрицу.Должен ли я их учитывать, а затем заново добавлять строки символов?Я хочу сохранить строки символов, поскольку они помогают идентифицировать идентификатор строк / групп.
РЕДАКТИРОВАТЬ 2: Кажется, что повторяет мою проблему NA:
names <- c("name1", "name2", "name3", "name4")
col1 <- sample(1:5, 100, replace = TRUE)
col1 <- paste("group", col1)
myFun <- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
col2 <- myFun(100)
col2
dat <- cbind(col1, col2)
dat
dat_sparse <- dat %>%
as_tibble() %>%
count(col1, col2) %>%
spread(col2, n, fill = 0) %>%
as.matrix() %>%
Matrix(., sparse = TRUE)
tail(dat_sparse)