Как преобразовать матрицу данных во фрейм данных относительно координат - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть векторы координат как

x = c(1, 2, 3, 4)
y = c(1, 2, 3)

и матрица наблюдаемых значений в этих местоположениях

matrix(round(rnorm(12, 10, 4)), nrow = 4, ncol = 3)

     [,1] [,2] [,3]
[1,]   10    9   11
[2,]   14   11   13
[3,]   15   10    6
[4,]   14   11   17

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

x y z
1 1 10
1 2 9
1 3 11
2 1 14
2 2 11
2 3 13

Я новичок в R и пытался разобраться с циклами, но есть ли простой способ сделать это для больших матриц и координат?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Другой способ - преобразовать ваши данные в data.frame , внести некоторые изменения и использовать функцию pivot_long () из tidyr.Обратите внимание, что это новая функция, поэтому вам, вероятно, придется заново установить библиотеку.

library(tidyr)

x = c(1, 2, 3, 4)
y = c(1, 2, 3)

Data <- matrix(round(rnorm(12, 10, 4)), nrow = 4, ncol = 3)
Data <- as.data.frame(Data)
names(Data) <- c("1","2","3")
Data$x = c(1,2,3,4)

pivot_longer(Data, c("1","2","3"), names_to = "y", values_to = "z")
0 голосов
/ 26 сентября 2019

Можно создать индекс строки / столбца с помощью 'x', 'y', используя expand.grid, использовать его для извлечения элементов матрицы ('m1'), чтобы создать три столбца data.frame

d1 <- expand.grid(x = x, y = y) 
out <- transform(d1, z = m1[as.matrix(d1)])
out[order(out$x), ]
#   x y  z
#1  1 1 10
#5  1 2  9
#9  1 3 11
#2  2 1 14
#6  2 2 11
#10 2 3 13
#3  3 1 15
#7  3 2 10
#11 3 3  6
#4  4 1 14
#8  4 2 11
#12 4 3 17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...