我有一个日期框架列表:
x <- data.frame("SN" = 1:25,"Age" = 1:25,"Gender" = rep(c("Male","Female"),25))
y <- data.frame("SN" = 1:25,"Age" = 1:25,"Occupation" = rep(c("Barber","Doctor"),25))
z <- data.frame("SN" = 1:25,"Age" = 1:25)
list <- c(x,y,z)
我正在尝试将数据帧绑定到一个未列出的数据帧中。我只想拉特定的列来制作最终数据帧。
因此,例如,我希望将x,y和z合并到一个数据帧中,并在结果数据帧中仅包含SN和Age。
是否有一种简单的方法?
答案 0 :(得分:3)
这够简单吗?
xyz <- bind_rows(select(x, SN, Age), select(y, SN, Age), select(z, SN, Age))
答案 1 :(得分:3)
如果您想要一个通用的解决方案,当数据框列表中包含三个以上的元素时,该解决方案也能起作用:
library(dplyr)
x <- data.frame("SN" = 1:25,"Age" = 1:25,"Gender" = rep(c("Male","Female"),25))
y <- data.frame("SN" = 1:25,"Age" = 1:25,"Occupation" = rep(c("Barber","Doctor"),25))
z <- data.frame("SN" = 1:25,"Age" = 1:25)
lst <- list(x,y,z)
df <- do.call(rbind, lapply(lst, select, SN, Age))
答案 2 :(得分:3)
使用purrr
的方法:
library(purrr)
lst %>% map_dfr(`[`, c("SN", "Age"))
说,将提取的[
函数映射到每个列表的“ SN”和“ Age”项上,然后将所有这些元素绑定到一个data.frame df
中–嘿,将它们绑定在一起时,请绑定 r ows ,所以dfr
。
答案 3 :(得分:2)
太简单了吗? Age和SB始终位于第一和第二位吗?
list <- as.data.frame(c(x[1:2],y[1:2],z[1:2]))
答案 4 :(得分:2)
我没有你的问题,但这有帮助吗?
bind_rows( (x %>% select(SN, Age)), (y %>% select(SN, Age)), z)
SN Age
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
15 15 15
16 16 16
17 17 17
18 18 18
19 19 19
20 20 20
21 21 21
22 22 22
23 23 23
24 24 24
25 25 25
26 1 1
27 2 2
28 3 3
29 4 4
30 5 5
31 6 6
32 7 7
33 8 8
34 9 9
35 10 10
36 11 11
37 12 12
38 13 13
39 14 14
40 15 15
41 16 16
42 17 17
43 18 18
44 19 19
45 20 20
46 21 21
47 22 22
48 23 23
49 24 24
50 25 25
51 1 1
52 2 2
53 3 3
54 4 4
55 5 5
56 6 6
57 7 7
58 8 8
59 9 9
60 10 10
61 11 11
62 12 12
63 13 13
64 14 14
65 15 15
66 16 16
67 17 17
68 18 18
69 19 19
70 20 20
71 21 21
72 22 22
73 23 23
74 24 24
75 25 25
76 1 1
77 2 2
78 3 3
79 4 4
80 5 5
81 6 6
82 7 7
83 8 8
84 9 9
85 10 10
86 11 11
87 12 12
88 13 13
89 14 14
90 15 15
91 16 16
92 17 17
93 18 18
94 19 19
95 20 20
96 21 21
97 22 22
98 23 23
99 24 24
100 25 25
101 1 1
102 2 2
103 3 3
104 4 4
105 5 5
106 6 6
107 7 7
108 8 8
109 9 9
110 10 10
111 11 11
112 12 12
113 13 13
114 14 14
115 15 15
116 16 16
117 17 17
118 18 18
119 19 19
120 20 20
121 21 21
122 22 22
123 23 23
124 24 24
125 25 25
答案 5 :(得分:2)
这是一个data.table
解决方案,它将与具有任意数量列的任何data.table
一起使用。它根据列的名称排列它们,并在需要的地方用NA
填充所有空白。对于任何数量的data.tables,您将始终可以使用相同的方法。
library(data.table)
library(magrittr)
x <- data.frame("SN" = 1:25,"Age" = 1:25,"Gender" = rep(c("Male","Female"),25))
y <- data.frame("SN" = 1:25,"Age" = 1:25,"Occupation" = rep(c("Barber","Doctor"),25))
z <- data.frame("SN" = 1:25,"Age" = 1:25)
listy <- list(x,y,z)
a <- rbindlist(listy,
use.names = TRUE,
fill = TRUE) %>%
.[, .(SN, Age)]
由reprex package(v0.2.1)于2019-02-27创建
答案 6 :(得分:2)
给出
lst <- c(x,y,z)
事实证明我们可以做到
out <- unstack(stack(lst))
head(out)
# SN Age
#1 1 1
#2 2 2
#3 3 3
#4 4 4
#5 5 5
#6 6 6