期望的结果:我想组合数据帧,以便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]))
答案 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