如何通过一个因子将data.frame拆分为数组?

时间:2019-04-02 17:10:11

标签: arrays r split

如果我们想将data.frame除以“因数” f,我们通常会这样做:

split(df1, df1$f)

但是,当我们要将data.frame拆分为array时,该怎么做呢?我发现我的代码有点尴尬,因为有两个t,而且max可能有点不可靠:

A <- array(t(as.matrix(df1)), dim=c(ncol(df1), max(df1$id), max(df1$f)))
apply(A, c(1, 3), t)

有没有较简单的基础R解决方案?

由于str仍然产生list,因此以下内容无法满足我的需求。

as.array(split(df1, df1$f))
as.array(lapply(split(df1, df1$f), as.matrix))
as.array(lapply(split(df1, df1$f), function(x) matrix(unlist(x), nrow(x))))

数据

df1 <- structure(list(id = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L), f = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L), x1 = c(14L, 15L, 4L, 10L, 8L, 6L, 7L, 
2L, 5L, 9L, 3L, 12L, 13L, 1L, 11L), x2 = c(12L, 15L, 6L, 9L, 
1L, 14L, 11L, 2L, 7L, 4L, 8L, 5L, 10L, 13L, 3L)), class = "data.frame", row.names = c(NA, 
-15L))

1 个答案:

答案 0 :(得分:1)

mylist = split(df1, df1$f)
dims = dim(mylist[[1]])
array(sapply(mylist, function(x){
    m = as.matrix(x)
    array(m, dim = dims)
}), dim = c(dims, length(mylist)))