R:基于柱值创建三维矩阵

R:基于柱值创建三维矩阵,r,multidimensional-array,R,Multidimensional Array,我有一个矩阵,它有以下前两列:位置,年份。然后是50列,每个日历日一列。如果未访问该位置,则“天”列为“NA”,如果未访问该位置,则为“1” 例如: Location Year 1 2 3 4 5 6 7 8 9 10 .... 50 Site1 2005 NA NA NA 1 NA NA 1 NA NA 1 .... NA Site2 2006 NA NA 1 NA NA NA 1 NA NA 1 .... NA 我以前使用过整形软件包来创建四维矩阵,数据

我有一个矩阵,它有以下前两列:位置,年份。然后是50列,每个日历日一列。如果未访问该位置,则“天”列为“NA”,如果未访问该位置,则为“1”

例如:

Location Year 1  2  3  4  5  6  7 8  9  10 .... 50
Site1    2005 NA NA NA 1  NA NA 1 NA NA 1  .... NA
Site2    2006 NA NA 1  NA NA NA 1 NA NA 1  .... NA
我以前使用过整形软件包来创建四维矩阵,数据帧中的每一列都用作一个变量来熔化然后铸造数组。但在这里,我有多个专栏,它似乎不工作

我想创建以下内容:

dim Y: locations
dim X: days 1-50
dim Z: Years
这几乎就像从每年提取数据,然后将每个位置按日数组一个接一个地堆叠起来。有人知道用这种方法创建三维阵列的最佳方法是什么吗


谢谢。

使用
重塑2
库可能有更简洁的方法,但使用lappy会为您提供更简洁的列表。如果需要它们作为数组,只需将其转换为

arr <- lapply(unique(dat$Location), function(L) dat[dat$Location==L, -1])

# add names, to keep it neat
names(arr) <- unique(dat$Location)

# Convert to array if needed
arr <- as.array(arr)

arr不清楚您想要什么(您给出了最终结果的一些值,不仅仅是结构,还有一些需要处理的数据)

首先我复制你的数据

dat <- data.frame(Location =c('Site1','Site2'),
           Year=c(2005,2006))
dat <- cbind(dat,matrix(sample(c(1,NA),100,rep=T),ncol=50))

我猜您想删除NAs

library(reshape2)

test <- read.table(text="Location Year 1  2  3  4  5  6  7 8  9  10
Site1    2005 NA NA NA 1  NA NA 1 NA NA 1
Site2    2006 NA NA 1  NA NA NA 1 NA NA 1", h=T)

melt(test, id = c("Location", "Year"), na.rm = TRUE, variable.name = "day")[, -4]

#    Location Year  day
# 6     Site2 2006   X3
# 7     Site1 2005   X4
# 13    Site1 2005   X7
# 14    Site2 2006   X7
# 19    Site1 2005  X10
# 20    Site2 2006  X10
library(重塑2)

测试谢谢里卡多,但我刚刚尝试了这个,它只是给了我一个路线列表。我需要一个实际的三维矩阵,其中行是位置,列是天数,第三维是年份。你知道我可以尝试什么吗?谢谢你的回复!这就是我最后要做的:见我上面的回答,但我最终创建了一个类似的矩阵,然后在重塑中使用cast函数来创建我所寻找的三维。谢谢
library(reshape2)

test <- read.table(text="Location Year 1  2  3  4  5  6  7 8  9  10
Site1    2005 NA NA NA 1  NA NA 1 NA NA 1
Site2    2006 NA NA 1  NA NA NA 1 NA NA 1", h=T)

melt(test, id = c("Location", "Year"), na.rm = TRUE, variable.name = "day")[, -4]

#    Location Year  day
# 6     Site2 2006   X3
# 7     Site1 2005   X4
# 13    Site1 2005   X7
# 14    Site2 2006   X7
# 19    Site1 2005  X10
# 20    Site2 2006  X10