преобразовать 2d матрицу в 3D матрицу - PullRequest
1 голос
/ 14 июня 2019

После моделирования у меня есть такие данные:

    capt2[1,1]   capt2[2,1]   capt2[3,1]   capt2[4,1]   capt2[5,1]   capt2[6,1]   capt2[1,2]   capt2[2,2]   capt2[3,2]   capt2[4,2]
1 4.582288e-05 5.115372e-05 6.409558e-05 7.132340e-05 6.927382e-05 5.727399e-05 2.753242e-05 3.106131e-05 3.832073e-05 4.270945e-05
2 4.675470e-05 5.045181e-05 6.467788e-05 7.112534e-05 6.809241e-05 5.885455e-05 2.789134e-05 3.097479e-05 3.790915e-05 4.176663e-05
3 4.586335e-05 5.127838e-05 6.344857e-05 6.934458e-05 6.622970e-05 5.651329e-05 2.795094e-05 3.120102e-05 3.790188e-05 4.172773e-05
4 4.572750e-05 5.150407e-05 6.333068e-05 7.145439e-05 6.624694e-05 5.836059e-05 2.795106e-05 3.055858e-05 3.826570e-05 4.172327e-05
5 4.740812e-05 5.113890e-05 6.397921e-05 7.163161e-05 6.838507e-05 5.620327e-05 2.790780e-05 3.083819e-05 3.821806e-05 4.198080e-05
6 4.583460e-05 5.106634e-05 6.340507e-05 7.030548e-05 6.886533e-05 5.901374e-05 2.792663e-05 3.136544e-05 3.862876e-05 4.177590e-05

с длиной 40000 строк.

Однако [1: 6,] относится к месяцам, а [, 1: x] относится к территориям.Поэтому я хотел бы иметь столбцы [, 1: x] (в моем наборе данных 28) для строк [1: 6,] и иметь длину (40000) в третьем измерении, поскольку это моделирование.

Впоследствиис моей трехмерной таблицей из 6 строк и 28 столбцов я хотел бы выполнить простые операции, такие как, например, гистограмма трехмерных значений строки 1 / столбца 1 и т. д. *

edit: "capt2 [3,1] "это просто имя столбца в символе

1 Ответ

1 голос
/ 14 июня 2019

Просто преобразуйте его в array.

Я сымитирую некоторые данные, чтобы показать вам, как это сделать.

set.seed(42)
n <- 10  # `n` in your data would be 40,000
# your rownames
v <- c("capt2[1,1]", "capt2[2,1]", "capt2[3,1]", "capt2[4,1]", "capt2[5,1]", "capt2[6,1]", 
       "capt2[1,2]", "capt2[2,2]", "capt2[3,2]", "capt2[4,2]", "capt2[5,2]", "capt2[6,2]", 
       "capt2[1,3]", "capt2[2,3]", "capt2[3,3]", "capt2[4,3]", "capt2[5,3]", "capt2[6,3]")
M <- matrix(rnorm(3*6*n), n, dimnames=list(NULL, v))  # shall symbolize your data

M[1:2, 1:6]
#      capt2[1,1] capt2[2,1] capt2[3,1]  capt2[4,1]  capt2[5,1] capt2[6,1]
# [1,]  -0.132088  0.5156677  1.3487070  1.01687283 -0.73844075  0.8131950
# [2,]   1.476787 -0.2343653 -0.0227647 -0.02671746  0.04656394 -0.1908165

Теперь примените array с правом dim ensions и dimnames.

A <- array(as.vector(t(M)), dim=c(6, 3, n), 
           dimnames=list(paste0("month.", 1:6), paste0("territory.", 1:3), NULL))
A
# , , 1
# 
#         territory.1 territory.2 territory.3
# month.1  -0.1320880   0.4703934  -1.3870266
# month.2   0.5156677   2.4595935   1.1573471
# month.3   1.3487070  -0.1662615  -0.2901453
# month.4   1.0168728   0.4823695   1.8922020
# month.5  -0.7384408  -0.7848878  -0.2764311
# month.6   0.8131950   1.1454705  -0.3047780
# 
# , , 2
# 
#         territory.1 territory.2 territory.3
# month.1  1.47678742 -1.24267027  -1.3066759
# month.2 -0.23436528 -0.81838032  -1.6824809
# month.3 -0.02276470  0.86256338   0.8285461
# month.4 -0.02671746  0.99294364  -1.3859983
# month.5  0.04656394  0.16341632  -1.1094188
# month.6 -0.19081647  0.03157319   0.5978327
# 
# , , 3
# 
#         territory.1 territory.2 territory.3
# month.1  -0.2170302  1.38157546 -0.76839533
# month.2  -0.6585034 -2.11320011  0.08731909
# month.3   0.2442259  0.09734049 -0.29122771
# month.4   0.7036078 -1.24639550 -0.41482430
# month.5  -1.0175961 -1.23671424  0.13386932
# month.6  -2.6999298 -0.83520581  1.39742941
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...