[英]How to split a data.frame into an array by a factor?
如果我們想按“因子” f
拆分data.frame
,我們通常會這樣做:
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
s。
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))
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)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.