Преобразовать вектор частоты в логическую матрицу - PullRequest
0 голосов
/ 30 октября 2019

Я хотел бы преобразовать частотный вектор (то есть colSums() матрицы) в одну из возможных версий исходной логической матрицы в R.

Что-то вроде:

    s <- c(1,2,3)
    # Some function of s
    # Example output:
         [,1] [,2] [,3]
    [1,]    0    0    1
    [2,]    1    0    0 
    [3,]    0    1    0
    [4,]    0    0    1
    [5,]    0    0    1
    [6,]    0    1    0

Порядок строк не важен. Может ли кто-нибудь дать мне подсказку о том, как это сделать?

Редактировать: Строки всегда равны 1. Выходными данными можно считать полиномиальный набор данных, где каждая строка отражает наблюдение.

Ответы [ 3 ]

2 голосов
/ 30 октября 2019
set.seed(523)

s <- c(1, 2, 3)
n <- 6

sapply(s, function(i) sample(c(rep(1, i), rep(0, n - i))))
#      [,1] [,2] [,3]
# [1,]    0    1    1
# [2,]    1    0    0
# [3,]    0    1    0
# [4,]    0    0    1
# [5,]    0    0    0
# [6,]    0    0    1
2 голосов
/ 31 октября 2019
# Input:
s <- c(1,2,3)
# ...
set.seed(1) # For reproducibility
nr <- sum(s)
nc <- length(s)
mat <- matrix(0L, nrow = nr, ncol = nc)
mat[cbind(seq_len(nr), sample(rep(seq_len(nc), s)))] <- 1L

# Output:
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    0    1
[3,]    0    1    0
[4,]    0    0    1
[5,]    0    1    0
[6,]    0    0    1
2 голосов
/ 30 октября 2019
s <- c(1,2,3)
result = matrix(0, nrow = max(s), ncol = length(s))
for (i in seq_along(s)) result[1:s[i], i] = 1
result
#      [,1] [,2] [,3]
# [1,]    1    1    1
# [2,]    0    1    1
# [3,]    0    0    1

Сохранение строк как 1

s <- c(1,2,3)
result = matrix(0, nrow = sum(s), ncol = length(s))
result[cbind(1:sum(s), rep(seq_along(s), times = s))] = 1
result
#      [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    0    1    0
# [3,]    0    1    0
# [4,]    0    0    1
# [5,]    0    0    1
# [6,]    0    0    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...