Изменение данных с длинной на матрицу - PullRequest
2 голосов
/ 24 октября 2019

У меня есть набор данных, который мне нужно преобразовать в матрицу. Проблема в том, что в настоящее время он находится в длинной форме.

Пример:

test <- expand.grid(x = c(0:5), y = c(0:6), z = NA)
test$z <- rnorm(length(test$x))

Мне нужно превратить это в матрицу, где ось x матрицы соответствует столбцу x теста, ось y соответствуетстолбец теста y, а матрица - данные z. Я не могу обернуть голову вокруг логики, чтобы сделать это.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Возможно, вы хотите сделать матрицу из z, количество строк которой соответствует уникальным x значениям, а число строк - уникальным y.

M <- matrix(test$z, nrow=length(unique(test$x)))
M
#            [,1]        [,2]       [,3]       [,4]        [,5]       [,6]       [,7]
# [1,]  1.3709584  1.51152200 -1.3888607 -2.4404669  1.8951935  0.4554501 -0.78445901
# [2,] -0.5646982 -0.09465904 -0.2787888  1.3201133 -0.4304691  0.7048373 -0.85090759
# [3,]  0.3631284  2.01842371 -0.1333213 -0.3066386 -0.2572694  1.0351035 -2.41420765
# [4,]  0.6328626 -0.06271410  0.6359504 -1.7813084 -1.7631631 -0.6089264  0.03612261
# [5,]  0.4042683  1.30486965 -0.2842529 -0.1719174  0.4600974  0.5049551  0.20599860
# [6,] -0.1061245  2.28664539 -2.6564554  1.2146747 -0.6399949 -1.7170087 -0.36105730

данных

test <- expand.grid(x = c(0:5), y = c(0:6), z = NA)
set.seed(42)  # for sake of reproducibility
test$z <- rnorm(length(test$x))
1 голос
/ 24 октября 2019

Использование функции as.matrix в базе R:

test <- expand.grid(x = c(0:5), y = c(0:6), z = NA)
test$z <- rnorm(length(test$x))
test<-as.matrix(test)
print(test)

выход

      x y           z
 [1,] 0 0  0.90406131
 [2,] 1 0  0.33312382
 [3,] 2 0  1.04430083
 [4,] 3 0 -1.26489040
 [5,] 4 0  0.86181552
 [6,] 5 0  0.88182537
 [7,] 0 1 -0.57815174
 [8,] 1 1 -0.75851384
 [9,] 2 1 -0.94640370
[10,] 3 1  0.42612930
[11,] 4 1 -0.30351194
[12,] 5 1  0.30895610
[13,] 0 2 -1.49820476
[14,] 1 2  0.24378831
[15,] 2 2  0.27930192
[16,] 3 2 -0.13181652
[17,] 4 2 -0.49358625
[18,] 5 2  3.24465996
[19,] 0 3  0.02912383
[20,] 1 3 -0.33232153
[21,] 2 3 -0.33266842
[22,] 3 3  2.23127521
[23,] 4 3  2.02369124
[24,] 5 3  0.42809981
[25,] 0 4 -2.22255234
[26,] 1 4 -1.44525614
[27,] 2 4 -0.53437374
[28,] 3 4 -0.72093009
[29,] 4 4  0.18409410
[30,] 5 4 -0.52258419
[31,] 0 5  0.05425793
[32,] 1 5  0.68580039
[33,] 2 5 -1.28536282
[34,] 3 5  0.24817880
[35,] 4 5 -2.78164941
[36,] 5 5  0.14324019
[37,] 0 6  0.04709956
[38,] 1 6 -1.97103390
[39,] 2 6  1.02853047
[40,] 3 6  0.36259093
[41,] 4 6 -1.01186391
[42,] 5 6 -1.39699418
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...