查看dplyr
包中的bind_rows
函数。默认情况下,它会为你做一些很好的事情,比如填写一个data.frame
中的列,但不是其他的NA
s,而不仅仅是失败。这里有一个例子:
# Use the dplyr package for binding rows and for selecting columns
library(dplyr)
# Generate some example data
a <- data.frame(a = rnorm(10), b = rnorm(10))
b <- data.frame(a = rnorm(5), c = rnorm(5))
# Stack data frames
bind_rows(a, b)
Source: local data frame [15 x 3]
a b c
1 2.2891895 0.1940835 NA
2 0.7620825 -0.2441634 NA
3 1.8289665 1.5280338 NA
4 -0.9851729 -0.7187585 NA
5 1.5829853 1.6609695 NA
6 0.9231296 1.8052112 NA
7 -0.58-0.6928449 NA
8 0.2033514 -0.6673596 NA
9 -0.8576628 0.5163021 NA
10 0.6296633 -1.2445280 NA
11 2.1693068 NA -0.2556584
12 -0.1048966 NA -0.3132198
13 0.2673514 NA -1.1181995
14 1.0937759 NA -2.5750115
15 -0.8147180 NA -1.5525338
要在你的问题解决问题,你想选择在主data.frame
第一列。如果a
是主版本data.frame
,并且b
包含要添加的数据,则可以使用dplyr
中的select
函数获取您首先需要的列。
# Select all columns in b with the same names as in master data, a
# Use select_() instead of select() to do standard evaluation.
b <- select_(b, names(a))
# Combine
bind_rows(a, b)
Source: local data frame [15 x 2]
a b
1 2.2891895 0.1940835
2 0.7620825 -0.2441634
3 1.8289665 1.5280338
4 -0.9851729 -0.7187585
5 1.5829853 1.6609695
6 0.9231296 1.8052112
7 -0.58-0.6928449
8 0.2033514 -0.6673596
9 -0.8576628 0.5163021
10 0.6296633 -1.2445280
11 2.1693068 NA
12 -0.1048966 NA
13 0.2673514 NA
14 1.0937759 NA
15 -0.8147180 NA
如果您使用'dplyr',为什么不直接使用'bind_rows()'? – ialm
@ialm更仔细的阅读,这个答案*不使用任何'dplyr'函数(它只是加载包)。值得注意的是,在加载'dplyr'后加载'plyr' *将会用'plyr'版本掩盖'dplyr :: summarize'和'dplyr :: mutate',不推荐使用。 – Gregor
@Gregor是的,我现在明白了。出于你在注释中突出显示的原因,如果你在'dplyr'后面加载'plyr',我会发出一个警告,我相信Hadley建议你在'dplyr'之前加载'plyr',如果你需要使用这两个软件包的话。 – ialm