首页 > 解决方案 > 使用 dplyr 重新组织数据帧

问题描述

数据

exemplo1 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(exemplo1) <- c(rep("sample1", 6))
rownames(exemplo1) <- c(letters[1:11])

exemplo2 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(exemplo2) <- c(rep("sample2", 6))
rownames(exemplo2) <- c(letters[1:11])

exemplo3 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(exemplo3) <- c(rep("sample3", 6))
rownames(exemplo3) <- c(letters[1:11])

exemplo4 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(exemplo4) <- c(rep("sample4", 6))
rownames(exemplo4) <- c(letters[1:11])

exemplo5 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(exemplo5) <- c(rep("sample5", 6))
rownames(exemplo5) <- c(letters[1:11])

exemplo6 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(exemplo6) <- c(rep("sample6", 6))
rownames(exemplo6) <- c(letters[1:11])

目标

从这些数据中,我想创建 6 个其他数据框。

一个数据框( final1) 应包含、、、和的第一exemplo1exemplo2exemplo3exemplo4exemplo5exemplo6

final1 <- as.data.frame(matrix(, ncol = 6, nrow = 11))
colnames(final1) <- c('sample1','sample2','sample3','sample4','sample5','sample6')
rownames(final1) <- c('a','b','c','d','e','f','g','h','i','j','k')

第二个数据框 ( final2) 也是如此。它应该包含exemplo1exemplo2exemplo3exemplo4exemplo5的第二列** exemplo6。等等...

如何在维护列名(可能使用dplyr)的同时做到这一点?

标签: rdplyr

解决方案


使用基础 R 的解决方案。

您可以将所有数据框添加到列表中,因为它很容易处理数据框列表。现在,我们从每个列表中一列一列地提取cbind它们并将其作为数据框添加到列表中。这假设您的所有数据框都具有相同数量的列。

lst <- list(exemplo1, exemplo2, exemplo3, exemplo4, exemplo5, exemplo6)
final <- lapply(1:ncol(exemplo1), function(x) Reduce(cbind, lapply(lst, "[", x)))

现在,final[[1]]是您的第一个数据框,final[[2]]是您的第二个数据框,依此类推。


推荐阅读