我有3个数据集,我想一起回收。我已将我的列重命名为相同:
names(DF1) <- c("A", "B", "C")
names(DF2) <- c("A", "B", "C")
names(DF3) <- c("A", "B", "C")
他们各自得到不同数量的观察结果(分别为34,54,23)
但是,当我尝试使用rbind函数时,它会返回错误:
total <- rbind(DF1, DF2, DF3)
match.names(clabs,names(xi))出错: 名称与以前的名称不匹配
从其他已回答的问题中,由于列名不同而导致错误,但我已检查并重新检查它们是否已重命名。
我想得到一个总数据集,总共有111个列标题的观察结果。我是R的初学者,所以很多其他问题的答案都没有我。是否有人能够以外行的方式回答这个问题?
答案 0 :(得分:53)
您可以使用do.call
,如下所示:
do.call("rbind", list(DF1, DF2, DF3))
请注意do.call
的第二个参数是一个列表。
答案 1 :(得分:6)
这可能会对您有所帮助:
您可以使用rbind.fill
包中的plyr
(即使列名不相同也可以使用)
以下是optmatch
R
包中数据集的示例
library(optmatch)
library(plyr)
data(nuclearplants)
x<-nuclearplants
data1<-as.data.frame(x$cost)
data1<-data1[1:20,]
data1<-as.data.frame(data1)
data2<-as.data.frame(x$date)
rbind.fill(data1,data2)
data1 x$date
1 460.05 NA
2 452.99 NA
3 443.22 NA
4 652.32 NA
5 642.23 NA
6 345.39 NA
7 272.37 NA
8 317.21 NA
9 457.12 NA
10 690.19 NA
11 350.63 NA
12 402.59 NA
13 412.18 NA
14 495.58 NA
15 394.36 NA
16 423.32 NA
17 712.27 NA
18 289.66 NA
19 881.24 NA
20 490.88 NA
21 NA 68.58
22 NA 67.33
23 NA 67.33
24 NA 68.00
25 NA 68.00
26 NA 67.92
27 NA 68.17
28 NA 68.42
29 NA 68.42
30 NA 68.33
31 NA 68.58
32 NA 68.75
33 NA 68.42
34 NA 68.92
35 NA 68.92
36 NA 68.42
37 NA 69.50
38 NA 68.42
39 NA 69.17
40 NA 68.92
41 NA 68.75
42 NA 70.92
43 NA 69.67
44 NA 70.08
45 NA 70.42
46 NA 71.08
47 NA 67.25
48 NA 67.17
49 NA 67.83
50 NA 67.83
51 NA 67.25
52 NA 67.83
答案 2 :(得分:2)
要获得性能提升,请尝试rbindlist
包中的data.table
,例如
rbindlist(list(DF1,DF2,DF3))
答案 3 :(得分:0)
tidyverse 方法是使用 dplyr 软件包中的bind_rows()
:
bind_rows(DF1, DF2, DF3)