Добавить строки в фрейм данных из другого фрейма на основе вектора - PullRequest
0 голосов
/ 12 октября 2018

Я хотел бы добавить строки в фрейм данных на основе вектора в фрейме данных.Вот кадры данных (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

Я хотел бы добавить к df2любые строки, которых нет в df1, основанные на векторе ID.поэтому мой выходной фрейм данных будет выглядеть так:

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

Может кто-нибудь увидеть способ сделать это аккуратно, пожалуйста?Мне нужно сделать это для большого количества фреймов данных с разным количеством строк.Я пытался использовать merge или rbind, но я не смог понять, как это сделать, основываясь на векторе.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

А как насчет этого однострочного?

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
0 голосов
/ 12 октября 2018

Решение с 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
0 голосов
/ 12 октября 2018

Вы можете сделать следующее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...