R语言 将tibble重新排列成数组

x759pob2  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(148)

我有这个

df <- dplyr::tibble(id = c(1, 1, 1, 2, 2, 2),
                    value = c(0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
                    value2 = c(1.2, 1.3, 1.4, 1.5, 1.6, 1.7))

字符串
我想把它重新排列成数组。我确实设法在相当manuell过程中做到了这一点。看一看:

batch_size <- 2
lookbacks <- 3
n_features <- 2

x <- as.matrix(df %>% select(-id))
samples <- array(0, dim = c(batch_size, lookbacks, n_features))
samples[1,,] <- x[1:3, ]
samples[2,,] <- x[4:6, ]


这给了我想要的输出:

[,1] [,2] [,3]
[1,]  0.2  0.3  0.4
[2,]  0.5  0.6  0.7

, , 2

     [,1] [,2] [,3]
[1,]  1.2  1.3  1.4
[2,]  1.5  1.6  1.7


然而,我想知道是否有可能直接将数据一次性转换为所需的数组,就像

samples <- array(x, dim = c(batch_size, lookbacks, n_features))


然而,这给出:

[,1] [,2] [,3]
[1,]  0.2  0.4  0.6
[2,]  0.3  0.5  0.7

, , 2

     [,1] [,2] [,3]
[1,]  1.2  1.4  1.6
[2,]  1.3  1.5  1.7


,这会以错误的方式重新排列数据。
是否有任何选项可以更改此行为以实现第一个输出?

wvmv3b1j

wvmv3b1j1#

可以使用sapply(simplify = "array") + matrix(byrow = TRUE)

sapply(df[-1], matrix, 2, 3, byrow = TRUE, simplify = "array")

# , , value
# 
#      [,1] [,2] [,3]
# [1,]  0.2  0.3  0.4
# [2,]  0.5  0.6  0.7
# 
# , , value2
# 
#      [,1] [,2] [,3]
# [1,]  1.2  1.3  1.4
# [2,]  1.5  1.6  1.7

字符串

hs1ihplo

hs1ihplo2#

array这样做

with(
    df,
    array(unlist(df[order(ave(id, id, FUN = seq_along)), -1]), c(2, 3, 2))
)

字符串
这给了

, , 1

     [,1] [,2] [,3]
[1,]  0.2  0.3  0.4
[2,]  0.5  0.6  0.7

, , 2

     [,1] [,2] [,3]
[1,]  1.2  1.3  1.4
[2,]  1.5  1.6  1.7

相关问题