R – 连接两个数据框?

给定两个dataframeab

 > a abc 1 -0.2246894 -1.48167912 -1.65099363 2 0.5559320 -0.87898575 -0.15634590 3 1.8469466 -0.01487524 -0.53098215 4 -0.6875051 0.23880967 0.01824621 5 -0.6735163 0.75485292 0.44154092 > b ac 1 0.4287284 -0.3295925 2 0.5201492 0.3341251 3 -2.6355570 1.7916780 4 -1.3645337 1.3642276 5 -0.4954542 -0.6660001 

有没有简单的方法来连接这些以便返回一个新的数据框的forms:

 > new abc 1 -0.2246894 -1.48167912106676 -1.65099363 2 0.5559320 -0.878985746842256 -0.15634590 3 1.8469466 -0.0148752354840942 -0.53098215 4 -0.6875051 0.238809666690982 0.01824621 5 -0.6735163 0.754852923524198 0.44154092 6 0.4287284 NA -0.32959248 7 0.5201492 NA 0.33412510 8 -2.6355570 NA 1.79167801 9 -1.3645337 NA 1.36422764 10 -0.4954542 NA -0.66600006 

实质上,我想要合并数据框,匹配标题,并在数据框b中丢失标题的位置插入NA

有一个简单的方法来做到这一点?

你想要“rbind”。

 b$b <- NA new <- rbind(a, b) 

rbind要求dataframe具有相同的列。

第一行将列b添加到dataframeb。

结果

 > a <- data.frame(a=c(0,1,2), b=c(3,4,5), c=c(6,7,8)) > a abc 1 0 3 6 2 1 4 7 3 2 5 8 > b <- data.frame(a=c(9,10,11), c=c(12,13,14)) > b ac 1 9 12 2 10 13 3 11 14 > b$b <- NA > b acb 1 9 12 NA 2 10 13 NA 3 11 14 NA > new <- rbind(a,b) > new abc 1 0 3 6 2 1 4 7 3 2 5 8 4 9 NA 12 5 10 NA 13 6 11 NA 14 

试试plyr包:

 rbind.fill(a,b,c) 

这里有一个简单的小函数,它会在自动检测到每列丢失了哪些列并将其添加到所有NA之后将两个数据集绑定在一起。

无论出于何种原因,在使用merge函数时,在大数据集上返回的速度要快得多。

 fastmerge <- function(d1, d2) { d1.names <- names(d1) d2.names <- names(d2) # columns in d1 but not in d2 d2.add <- setdiff(d1.names, d2.names) # columns in d2 but not in d1 d1.add <- setdiff(d2.names, d1.names) # add blank columns to d2 if(length(d2.add) > 0) { for(i in 1:length(d2.add)) { d2[d2.add[i]] <- NA } } # add blank columns to d1 if(length(d1.add) > 0) { for(i in 1:length(d1.add)) { d1[d1.add[i]] <- NA } } return(rbind(d1, d2)) } 

你可以使用该function

bind_rows(a,b)

从dplyr库

您可以使用rbind但在这种情况下,您需要在两个表中具有相同数量的列,因此请尝试以下操作:

 b$b<-as.double(NA) #keeping numeric format is essential for further calculations new<-rbind(a,b)