我有2个数据帧想要具有完全相同的列,以便稍后执行合并(垂直)。我目前所做的是首先手动检查df1是否包含df2中的每一列,如果没有,则创建一个新列并指定空值,如df1$v3 <- NA
。
然而,df1的列数远远少于df2,这将使代码真的很长,而且我目前的方式并不聪明。我想知道是否有一种有效的方法可以做到这一点。
以下是一个例子:
v1<-c(1:5)
v2<-c("a", "b", "c", "d", "e")
df1<-data.frame(v1,v2)
v3=c("de890","gyu","71g", "178sg", "ss10")
df2<-data.frame(v1,v2,v3)
df1
v1 v2
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
df2
v1 v2 v3
1 1 a de890
2 2 b gyu
3 3 c 71g
4 4 d 178sg
5 5 e ss10
因为df1没有v3列,我想创建一个新列并将其命名为v3并赋值为null,所以finally df1会喜欢这个:
df1
v1 v2 v3
1 1 a NA
2 2 b NA
3 3 c NA
4 4 d NA
5 5 e NA
请您分享一些关于如何有效地进行操作的指示灯? 谢谢你的帮助!
答案 0 :(得分:1)
不确定为什么需要创建不必要的列并为其分配NA
。但是,你可以这样做:
v1<-c(1:5)
v2<-c("a", "b", "c", "d", "e")
df1<-data.frame(v1,v2)
v3=c("de890","gyu","71g", "178sg", "ss10")\
v4<-c(1:5)
df2<-data.frame(v1,v2,v3,v4)
# Finding the columns not found in df1, but df2
cols<-setdiff(names(df2),names(df1))
# Looping to create them in df1
for(i in cols){df1[[i]]<-NA}
答案 1 :(得分:0)
正如@LAP提到merge
会自动添加NA
的列,但如果OP仍然想要预先添加列,则可以实现:
df1[,setdiff(names(df2),names(df1))] <- NA
df1
# v1 v2 v3
# 1 1 a NA
# 2 2 b NA
# 3 3 c NA
# 4 4 d NA
# 5 5 e NA