我想根据数据框内的向量向数据框添加行。这是数据帧(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,但是我还无法根据向量确定如何做。
谢谢!
答案 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