如果我们想将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))
答案 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)))