通过从列表中选择列名来绑定行?

问题描述 投票:1回答:7

我有一个日期框架列表:

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。

有一个简单的方法吗?

r list dplyr
7个回答
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))

3
投票

purrr的方法:

library(purrr)
lst %>% map_dfr(`[`, c("SN", "Age"))

其中说,将提取[函数映射到每个列表中的项目“SN”和“Age”,然后将所有这些元素绑定到data.frame df - 嘿,当你将它们绑定在一起时,请绑定行如此dfr


3
投票

这很简单吗?

xyz <- bind_rows(select(x, SN, Age), select(y, SN, Age), select(z, SN, Age))

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

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创建于2019-02-27(v0.2.1)


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

2
投票

太简单? Age和SB总是在1和2位吗?

list <- as.data.frame(c(x[1:2],y[1:2],z[1:2]))
© www.soinside.com 2019 - 2024. All rights reserved.