如何在不合并的情况下将数据帧与不同列组合?

时间:2015-03-15 14:39:24

标签: r dataframe

期望的结果:我想组合数据帧,以便DF1中DF1中的列被行绑定到DF1;在DF1中但不在DF2中的列添加了nrow(DF2)零;在DF2中但在DF1中没有的列的前面有nrow(DF1)个零,然后这些列被装在DF上。

我尝试了什么:我尝试过使用ncol,nrow和matrix来生成最终df的部分内容,但是我遇到了问题,例如,第二个DF只有一列而ncol(DF)返回NULL的极端情况,例如

所需结果的模板

例如,如果我有这两个DF:

> DF_dummy_1
  a b c e
1 1 a f u
2 2 b g v
3 3 c h w
4 4 d i x
5 5 e j y

> DF_dummy_2
  a b d
1 1 p k
2 2 q l
3 3 r m
4 4 s n
5 5 t o

我想以

结束
> DF_final
    a b c e d
1   1 a f u 0
2   2 b g v 0
3   3 c h w 0
4   4 d i x 0
5   5 e j y 0
6   1 p 0 0 k
7   2 q 0 0 l
8   3 r 0 0 m
9   4 s 0 0 n
10  5 t 0 0 o

生成此ex的代码:

DF_dummy_1 <- data.frame("a" = seq(1:5), "b" = letters[1:5], "c" = letters[6:10], "e" = letters[21:25])
DF_dummy_2 <- data.frame("a" = seq(6:10), "b" = letters[16:20], "d" = letters[11:15])
DF_final <- data.frame("a" = seq(1:10), "b" = c(letters[1:5],letters[16:20]),
                       "c" = c(letters[6:10], rep("0",5)), 
                       "e" = c(letters[21:25], rep("0",5)),
                       "d" = c(rep("0",5), letters[11:15]))

1 个答案:

答案 0 :(得分:2)

将数据集放入列表后,您可以使用rbindlist选项尝试fill=TRUE。 (为方便起见,将数据集命名为&#39; df1&#39;,&#39; df2&#39;),默认情况下,&#39; NAs&#39;将占用丢失的行,稍后可将其替换为0。

library(data.table)#data.table_1.9.5
rbindlist(list(df1, df2), fill=TRUE)[,
         lapply(.SD, function(x) replace(x, is.na(x), 0))]
#    a b c e d
# 1: 1 a f u 0
# 2: 2 b g v 0
# 3: 3 c h w 0
# 4: 4 d i x 0
# 5: 5 e j y 0
# 6: 1 p 0 0 k
# 7: 2 q 0 0 l
# 8: 3 r 0 0 m
# 9: 4 s 0 0 n
#10: 5 t 0 0 o

基于&#39;数据&#39;在帖子中更新了一些列是&#39;因素&#39;。您可以在stringsAsFactors=FALSE中使用data.frame(..),以避免字符列转换为factors。考虑这些是factor

  rbindlist(list(DF_dummy_1, DF_dummy_2), fill=TRUE)[, 
    lapply(.SD, function(x) replace(as.character(x), is.na(x), 0))]
 #   a b c e d
 #1: 1 a f u 0
 #2: 2 b g v 0
 #3: 3 c h w 0
 #4: 4 d i x 0
 #5: 5 e j y 0
 #6: 1 p 0 0 k
 #7: 2 q 0 0 l
 #8: 3 r 0 0 m
 #9: 4 s 0 0 n
#10: 5 t 0 0 o