首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的两个不同的数据创建数组

从R中的两个不同的数据创建数组
EN

Stack Overflow用户
提问于 2021-08-14 15:55:59
回答 2查看 78关注 0票数 1

下面有两个数据框架:

代码语言:javascript
复制
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获得第二行。就像,

代码语言:javascript
复制
, , 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))

我不知道如何获得所有行的数据格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-14 18:03:27

我们可以使用asplit按行拆分数据集(MARGIN = 1),使用Map对相应的list元素进行rbind,并使用simplify2arraylist转换为array

代码语言:javascript
复制
simplify2array(unname(Map(rbind, asplit(df1, 1), asplit(df2, 1))))

-ouptut

代码语言:javascript
复制
, , 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

代码语言:javascript
复制
library(dplyr)
library(data.table)
bind_rows(df1, df2, .id = 'id') %>%
     mutate(rn = rowid(id), id = NULL) %>% 
     group_split(rn, .keep = FALSE) 
票数 2
EN

Stack Overflow用户

发布于 2021-08-14 16:16:54

更新:我们可以这样做:

代码语言:javascript
复制
df3 <- rbind(df1, df2)
row.names(df3) <- NULL

split(df3[order(df3[,1]),], rep(1:3, each=2))

输出:

代码语言:javascript
复制
$`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,然后逐行编号子集:

代码语言:javascript
复制
df3 <- rbind(df1, df2)
array1 <- df3[c(1,4),]
array2 <- df3[c(2,5),]
array3 <- df3[c(3,6),]

array1
array2
array3

产出:

代码语言:javascript
复制
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 3b
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68784914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档