如何通过系统地重新排列现有data.frames列表中的列来创建新的data.frames列表

时间:2019-07-03 06:56:37

标签: r list dataframe

我有大约100个数据帧的列表。我想创建一个新的数据帧列表,其中第一个数据帧由所有现有数据帧的第一列组成,第二个数据帧由第二列等组成……

请参见下面的代码,以获取我要执行的操作的示例。

a <- c(0, 0, 1, 1, 1)
b <- c(0, 1, 0, 0, 1)
c <- c(1, 1, 0, 0, 1)
df1 <- data.frame(a, b, c)
df2 <- data.frame(c, b, a)
df3 <- data.frame(b, a, c)
my_lst <- list(df1, df2, df3)

new_df1 <- data.frame(df1[,1], df2[,1], df3[,1])
new_df2 <- data.frame(df1[,2], df2[,2], df3[,2])
new_df3 <- data.frame(df1[,3], df2[,3], df3[,3])

new_lst <- list(new_df1, new_df2, new_df3)

对于包含大型数据帧的大型列表,是否有更紧凑的方法?预先感谢。

2 个答案:

答案 0 :(得分:2)

这是一个选择:

Requested pointer does not implement A.
I am just A!
Requested pointer does not implement A.
I am A and B

答案 1 :(得分:1)

tidyverse选项是更改列名transposebind_cols

library(tidyverse)
my_lst %>%
  map(setNames, letters[1:3]) %>%
  purrr::transpose() %>%
  map(bind_cols)

#$a
# A tibble: 5 x 3
#     V1    V2    V3
#  <dbl> <dbl> <dbl>
#1     0     1     0
#2     0     1     1
#3     1     0     0
#4     1     0     0
#5     1     1     1

#$b
# A tibble: 5 x 3
#     V1    V2    V3
#  <dbl> <dbl> <dbl>
#1     0     0     0
#2     1     1     0
#3     0     0     1
#4     0     0     1
#5     1     1     1

#$c
# A tibble: 5 x 3
#     V1    V2    V3
#  <dbl> <dbl> <dbl>
#1     1     0     1
#2     1     0     1
#3     0     1     0
#4     0     1     0
#5     1     1     1