下面有两个数据框架:
c1a <- c("1a","1a","1a")
c1b <- c("1b","1b","1b")
c2a <- c("2a","2a","2a")
c2b <- c("2b","2b","2b")
c3a <- c("3a","3a","3a")
c3b <- c("3b","3b","3b")
df1 <- as.data.frame(rbind(c1a,c2a,c3a))
df2 <- as.data.frame(rbind(c1b,c2b,c3b))我想要创建一个包含三个2*3矩阵的数组,每个矩阵从df1获得第一行,从df2获得第二行。就像,
, , 1
[,1] [,2] [,3]
[1,] 1a 1a 1a
[2,] 1b 1b 1b
, , 2
[,1] [,2] [,3]
[1,] 2a 2a 2a
[2,] 2b 2b 2b
, , 3
[,1] [,2] [,3]
[1,] 3a 3a 3a
[2,] 3b 3b 3b
array(c(rbind(c1a,c2a),rbind(c1b,c2b)), dim = c(2,3,2))我不知道如何获得所有行的数据格式。
发布于 2021-08-14 18:03:27
我们可以使用asplit按行拆分数据集(MARGIN = 1),使用Map对相应的list元素进行rbind,并使用simplify2array将list转换为array
simplify2array(unname(Map(rbind, asplit(df1, 1), asplit(df2, 1))))-ouptut
, , 1
V1 V2 V3
[1,] "1a" "1a" "1a"
[2,] "1b" "1b" "1b"
, , 2
V1 V2 V3
[1,] "2a" "2a" "2a"
[2,] "2b" "2b" "2b"
, , 3
V1 V2 V3
[1,] "3a" "3a" "3a"
[2,] "3b" "3b" "3b"或者也可以将数据集绑定在一起创建一个'id‘列,通过'id’获取序列,并执行返回list of tibbles的tibble。
library(dplyr)
library(data.table)
bind_rows(df1, df2, .id = 'id') %>%
mutate(rn = rowid(id), id = NULL) %>%
group_split(rn, .keep = FALSE) 发布于 2021-08-14 16:16:54
更新:我们可以这样做:
df3 <- rbind(df1, df2)
row.names(df3) <- NULL
split(df3[order(df3[,1]),], rep(1:3, each=2))输出:
$`1`
V1 V2 V3
1 1a 1a 1a
4 1b 1b 1b
$`2`
V1 V2 V3
2 2a 2a 2a
5 2b 2b 2b
$`3`
V1 V2 V3
3 3a 3a 3a
6 3b 3b 3b第一个答案:这是第一次尝试:在基数R中,我们可以先rbind,然后逐行编号子集:
df3 <- rbind(df1, df2)
array1 <- df3[c(1,4),]
array2 <- df3[c(2,5),]
array3 <- df3[c(3,6),]
array1
array2
array3产出:
array1
V1 V2 V3
c1a 1a 1a 1a
c1b 1b 1b 1b
> array2
V1 V2 V3
c2a 2a 2a 2a
c2b 2b 2b 2b
> array3
V1 V2 V3
c3a 3a 3a 3a
c3b 3b 3b 3bhttps://stackoverflow.com/questions/68784914
复制相似问题