根据向量将行从另一个数据框添加到数据框

时间:2018-10-12 08:21:24

标签: r

我想根据数据框内的向量向数据框添加行。这是数据帧(df2是我想向其中添加行的数据帧; df1是我想从中获取行的数据帧):

ID=c(1:5)
x=c(rep("a",3),rep("b",2))
y=c(rep(0,5))
df1=data.frame(ID,x,y)
df2=df1[2:4,1:2]
df2$y=c(5,2,3)

df1
  ID x y
1  1 a 0
2  2 a 0
3  3 a 0
4  4 b 0
5  5 b 0

df2
  ID x y
2  2 a 5
3  3 a 2
4  4 b 3

我想根据ID向量将df1中没有的任何行添加到df2中。所以我的输出数据帧看起来像这样:

 ID x y
  1 b 0
  5 b 0
  2 a 5
  3 a 2
  4 b 3

请问有人能巧妙地做到这一点吗?我需要对很多数据帧执行这些操作,所有数据帧都具有不同的行数。我已经尝试过使用merge或rbind,但是我还无法根据向量确定如何做。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

missingIDs <-  which(!df1$ID %in% df2$ID) #check which df1 ID's are not in df2, see function is.element()
df.toadd <- df1[missingIDs,] #define the data frame to add to df2
result <- rbind(df.toadd, df2) #use rbind to add it
result

  ID x y
1  1 a 0
5  5 b 0
2  2 a 5
3  3 a 2
4  4 b 3

答案 1 :(得分:1)

这种单线呢?

rbind(df2, df1[!df1$ID %in% df2$ID,])

  ID x y
2  2 a 5
3  3 a 2
4  4 b 3
1  1 a 0
5  5 b 0

答案 2 :(得分:1)

使用dplyr的解决方案:

bind_rows(df2,anti_join(df1,df2,by="ID"))

#  ID x y
#1  2 a 5
#2  3 a 2
#3  4 b 3
#4  1 a 0
#5  5 b 0