我想将一个数据框附加到另一个数据框(主数据框).问题是只有列的子集是常见的.此外,其列的顺序可能不同.
主数据帧:
a b c r1 1 2 -2 r2 2 4 -4 r3 3 6 -6 r4 4 8 -8
新数据框:
d a c r1 -120 10 -20 r2 -140 20 -40
预期结果:
a b c r1 1 2 -2 r2 2 4 -4 r3 3 6 -6 r4 4 8 -8 r5 10 NaN -20 r6 20 NaN -40
这有什么聪明的方法吗?这是一个类似的问题,但设置不同.
查看包中的bind_rows
功能dplyr
.默认情况下,它会为你做一些很好的事情,例如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.5801230 -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
是master data.frame
,并b
包含要添加的数据,则可以使用select
函数from dplyr
来获取首先需要的列.
# 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.5801230 -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