这是我的数据帧:
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包可以帮助我做到这一点吗?
有帮助吗?
您可以使用一次性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)
随着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)