2013-04-22 50 views
18

我有3个数据集,我想将它们组合在一起。我已经改名为我的专栏是相同的:R:绑定多个数据集

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) 

Error in match.names(clabs, names(xi)) : 
    names do not match previous names 

从其他回答问题的错误应该出现,因为不同的名称列,但我已经检查和复查,他们已经改名为相同。

我想最终得到总数据集,总共有111个观察值与列标题。我是R的初学者,其他许多问题的答案都没有涉及到我。任何人都可以用通俗的话来回答这个问题吗?

+0

您确定它们具有相同的列数?尝试使用'str(DF1)'等等来查看所有数据集。 – JackeJR 2013-04-22 03:01:23

+0

谢谢!原来我在其中一个数据集中有一个额外的空列,但现在我的问题是我的一些行在rbind之后消失了。所以当我做了'代码'(rbind(DF1,DF2))而不是88行时,我期待我用'code'(nrow(total))检查时以70结尾。 – user2305783 2013-04-22 03:09:48

+0

你在'nrow(DF1 )'和'nrow(DF2)'在你的'rbind'之前? – JackeJR 2013-04-22 03:12:39

回答

6

这可能会帮助您:

您可以使用rbind.fillplyr包(可以使用,即使列名是不一样的)

这里是从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 
36

您可以使用do.call,像这样:

do.call("rbind", list(DF1, DF2, DF3)) 

请注意,do.call的第二个参数是一个列表。

1

对于性能提升尝试rbindlistdata.table包例如。

rbindlist(list(DF1,DF2,DF3))