使用R中的dplyr创建包含列表元素的数据框

Lau*_*ura 5 r dplyr

这是我的数据帧:

    df<-list(structure(list(Col1 = structure(1:6, .Label = c("A", "B", 
"C", "D", "E", "F"), class = "factor"), Col2 = structure(c(1L, 
2L, 3L, 2L, 4L, 5L), .Label = c("B", "C", "D", "F", "G"), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L)), structure(list(Col1 = structure(c(1L, 4L, 5L, 6L, 2L, 
3L), .Label = c("A", "E", "H", "M", "N", "P"), class = "factor"), 
    Col2 = structure(c(1L, 2L, 3L, 2L, 4L, 5L), .Label = c("B", 
    "C", "D", "F", "G"), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L)), structure(list(Col1 = structure(c(1L, 4L, 6L, 5L, 2L, 
3L), .Label = c("A", "W", "H", "M", "T", "U"), class = "factor"), 
    Col2 = structure(c(1L, 2L, 3L, 2L, 4L, 5L), .Label = c("B", 
    "C", "D", "S", "G"), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L))) 
Run Code Online (Sandbox Code Playgroud)

我想提取col1 = df[[1]][1]作为数据帧.然后我要合并到该列表的第二个位置的col1 df[[1]][1],然后我将有一个包含2列的数据帧.在此之后,我想将列表的第三个位置的第1列合并到具有两列的数据帧,然后我将拥有一个包含3列的数据帧.

换句话说,我的数据框应该有3列,列表中每个条目的所有第一列.

dplyr包可以帮助我做到这一点吗?

有帮助吗?

Rui*_*das 5

您可以使用一次性lapply提取命名的三列"Col1。然后设置结果的名称。

col1 <- as.data.frame(lapply(df, '[[', "Col1"))
names(col1) <- letters[seq_along(col1)]

col1
#  a b c
#1 A A A
#2 B M M
#3 C N U
#4 D P T
#5 E E W
#6 F H H
Run Code Online (Sandbox Code Playgroud)

选择您可能会发现更好的任何其他列名称。

一种dplyr方法可能是

df %>% 
  unlist(recursive = FALSE) %>%
  as.data.frame %>%
  select(., starts_with("Col1"))
#  Col1 Col1.1 Col1.2
#1    A      A      A
#2    B      M      M
#3    C      N      U
#4    D      P      T
#5    E      E      W
#6    F      H      H
Run Code Online (Sandbox Code Playgroud)


avi*_*seR 5

随着map_dfc来自purrr:

library(purrr)

map_dfc(df, `[`, 1)
Run Code Online (Sandbox Code Playgroud)

输出:

  Col1 Col11 Col12
1    A     A     A
2    B     M     M
3    C     N     U
4    D     P     T
5    E     E     W
6    F     H     H
Run Code Online (Sandbox Code Playgroud)