【问题标题】:Create list of arrays by subsetting single array R通过子集单个数组 R 创建数组列表
【发布时间】:2016-08-21 17:47:44
【问题描述】:

我有一个大型 4 维数组,并希望将此数组子集化为一个列表,其中列表的每个元素都是一个数组。

数据示例:

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 维循环到子集是我碰壁的地方。我想按第四维进行子集化,在这个例子中是“物种”。具体来说,我想为每两个物种创建一个数组列表。因此:

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 个物种组成,因此能够处理奇数的解决方案是最好的。 谢谢!

【问题讨论】:

    标签: arrays r


    【解决方案1】:

    我们得到第4维的长度('n'),得到交替元素的序列('i1'),创建length'i1'的'array.list'。循环遍历“array.list”的序列,并根据我们创建的索引“i1”将“array.list”的每个元素分配给“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)]
     }
    

    【讨论】:

    • 谢谢,这正是我所需要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2021-01-26
    • 2017-07-21
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多