2016-08-21 10 views
1

大きな4次元配列を持ち、リストの各要素が配列であるリストにこの配列をサブセット化したいと考えています。単一配列をサブセット化して配列のリストを作成するR

データ例:

species<-c("Moose","Deer","Wolf","Bear","Livestock","Human") 
unit<-c("A","B") 
survey <-1:3 
year<-1:3 
data <- expand.grid(species=species, unit=unit, survey=survey, year=year) 
data$count <- round(rnorm(108,10,2),0) 
library(reshape) 
data.array <- cast(data, survey~year~unit~species) 

data.arrayは寸法を有し、[3,3,2,6]

はサブセットする4次元の上にループ私は壁にぶつかるきたところです。この例では「種」である第4次元の部分集合にしたいと思います。具体的には、2つの種ごとに配列のリストを作成したいと考えています。

array.list <- list() 
array.list[[1]] <- data.array[,,,1:2] 
array.list[[2]] <- data.array[,,,3:4] 
array.list[[3]] <- data.array[,,,5:6] 
str(array.list) 

完全なデータセットは4番目の次元が111種で構成されているため、奇数を処理できる解決策が最も適しています。 ありがとう!

答えて

1

第4次元( 'n')の長さを取得し、交互要素( 'i1')のシーケンスを取得し、length 'i1'の 'array.list'を作成します。 'array.list'のシーケンスをループし、 'array.list'の各要素に 'i1'を作成したインデックスに基づいて 'data.array'のサブセットを割り当てます。

n <- dim(data.array)[4] 
i1 <- seq(1, n, by = 2) 

array.list <- vector("list", length(i1)) 
for(i in seq_along(array.list)){ 
    array.list[[i]] <- data.array[,,, i1[i]:pmin(i1[i]+1, n)] 
} 
+1

ありがとうございました。 – Flammulation

関連する問題