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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过从列表中选择列名来绑定行?相关的知识,希望对你有一定的参考价值。

我有一个日期框架列表:

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。

有一个简单的方法吗?

答案

如果您想要一个通用解决方案,当您在数据帧列表中包含三个以上元素时,这个解决方案也会起作用:

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))
另一答案

purrr的方法:

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

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

另一答案

这很简单吗?

xyz <- bind_rows(select(x, SN, Age), select(y, SN, Age), select(z, SN, Age))
另一答案

我没有你的问题,但这有帮助吗?

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
另一答案

这是一个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)

另一答案

特定

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
另一答案

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

list <- as.data.frame(c(x[1:2],y[1:2],z[1:2]))

以上是关于通过从列表中选择列名来绑定行?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过从另一个下拉列表中选择值来填充下拉列表?

安卓。通过从片段中的按钮调用片段中的方法来关闭片段?

如何通过从数据库中获取表名和列名来更新 Oracle 表?

对于要求,我需要通过从该数据帧的列中的列表中的值创建行来将数据帧转换为 [重复]

DB2 - 通过从其他表中选择行数来限制表中获取的行

使用行名,列名和最大列值创建数据框