R - объединить трехмерную матрицу и один вектор, затем выбрать данные за определенный месяц - PullRequest
0 голосов
/ 02 февраля 2012

у меня теперь один вектор даты A (362 строки), и у меня есть 3D-матрица B (размеры 360*180*3620)

> str(ssta_date)
 POSIXlt[1:362], format: "1981-11-15" "1981-12-15" "1982-01-15" "1982-02-15" "1982-03-15" ...

> dim(ssta_sst)
[1] 360 180 362

возможно ли объединить A и B как кадр данных или что-то еще. оно должно соответствовать каждой дате и каждой температуре в B [,, 362]. поэтому каждая дата будет соответствовать матрице 360 * 180.

Поскольку я планирую сделать это для выбора определенных данных за месяц, есть ли какие-либо ярлыки для выбора данных за месяц без объединения двух наборов данных?

1 Ответ

1 голос
/ 02 февраля 2012

Если я понимаю, что вы хотите, вы можете использовать melt для преобразования массива в data.frame, а затем использовать merge для объединения его с другим фрагментом данных.Если вам нужен массив в конце, вы можете использовать acast для преобразования data.frame обратно в массив.

# Sample data
n <- 10
d <- array( 
  rnorm(n^3),
  dim = c(n,n,n), 
  dimnames = list(
    One   = LETTERS[1:n], 
    Two   = LETTERS[1:n], 
    Three = LETTERS[1:n]
  ) 
)
x <- data.frame( One=LETTERS[1:n], x=runif(n) )

library(reshape2)
d <- melt(d)
d <- merge( d, x, by="One", all=TRUE )
d$result <- d$value + d$x # Do something with the data
acast( d, One ~ Two ~ Three, value.var="result" )
...