Я хочу создать матрицу "nx 8" из вектора "nx 1"
- Вопрос: Почему я хочу это сделать?
- Ответ: По порядкучтобы умножить это на матрицу переходов вероятности цепи Маркова "8 x 8" и вернуть матрицу "nx 8" предсказанных состояний
- Решение: я решил эту проблему в попытке 3 ниже- но хотите знать, есть ли лучший способ решить эту проблему (вместо использования двух функций транспонирования)?
R code
Создатьфиктивный вектор "nx 1": (здесь мы используем n = 2)
> temp_vector <- c("state 4", "state 7")
> temp_vector
[1] "state 4" "state 7"
Ожидаемый результат:
NA NA NA TRUE NA NA NA NA
NA NA NA NA NA NA TRUE NA
Попытка 1: преобразовать в матрицу:
> temp_matrix <- matrix(temp_vector,
ncol = 8, # there are 8 states
nrow = length(temp_vector) # there are 10 rows in the vector
)
> temp_matrix
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] "state 4" "state 4" "state 4" "state 4" "state 4" "state 4" "state 4" "state 4"
[2,] "state 7" "state 7" "state 7" "state 7" "state 7" "state 7" "state 7" "state 7"
Попытка 1 СБОЙ: Это не идеально, я хочу матрицу с ОДНОЙ записью на строку, а не ВОСЕМЬ.
Попытка 2: Сравните приведенное выше пространство состояний с матрицей, чтобы получитьматрица, состоящая из ИСТИНА / ЛОЖЬ:
> stateSpace <- c("state 1", "state 2", "state 3", "state 4", "state 5", "state 6", "state 7", "state 8")
> temp_matrix == stateSpace
state 1 state 2 state 3 state 4 state 5 state 6 state 7 state 8
[1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Попытка 2 СБОЙ: ожидается, что в каждой строке будет одна ИСТИНА, а оставшаяся ЛОЖЬ
Причина: (Я ДУМАЮ) матрицаОни сравниваются по столбцам.
Дальнейшее изучение попытки 2, для элемента по уровню элемента это работает :
> temp_matrix[1,1] == colnames(temp_matrix)[1]
state 1
FALSE
> temp_matrix[1,2] == colnames(temp_matrix)[2]
state 2
FALSE
> temp_matrix[1,3] == colnames(temp_matrix)[3]
state 3
FALSE
> temp_matrix[1,4] == colnames(temp_matrix)[4]
state 4
TRUE
Просмотр попытки 2далее, на уровне строки за строкой это работает :
> temp_matrix[1,] == colnames(temp_matrix)[]
state 1 state 2 state 3 state 4 state 5 state 6 state 7 state 8
FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
> temp_matrix[2,] == colnames(temp_matrix)[]
state 1 state 2 state 3 state 4 state 5 state 6 state 7 state 8
FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
Попытка 3: после того, как вы отметили вышеизложенное изучение столбцового сравнения в R
> t(stateSpace == t(temp_matrix))
state 1 state 2 state 3 state 4 state 5 state 6 state 7 state 8
[1,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
Попытка 3 УСПЕХ: создала эту публикацию стека переполнения, чтобы увидеть, есть ли лучший способ решить эту проблему (вместо использования двух функций транспонирования)
Другие опции: dcast, reshape, spread;к сожалению, это тоже НЕ сработало.
Я попытался изменить форму ():
reshape(temp_vector, direction = "wide")
> Error in data[, timevar] : incorrect number of dimensions
Я попытался распространить ():
library(tidyr)
spread(temp_vector, key = numbers, value = value)
> Error in UseMethod("spread_") :
no applicable method for 'spread_' applied to an object of class "factor"