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