Получение новых данных в старый фрейм данных в R - PullRequest
0 голосов
/ 13 декабря 2018

У меня проблема OD с получением нового фрейма данных в старый.

old<-data.frame(O=c("I","A","B","D","R","F","A"),D=c("I","F","C","B","D","G","B"),F3=c(1:7))
new<-data.frame(O=c("F","D","R","F","A"),D=c("G","B","D","G","F"),F3=c(11,0,13,14,16))
old$OD<-paste(old$O, old$D, sep=" ")
new$OD<-paste(new$O, new$D, sep=" ")

Старые данные:

> old
  O D F3  OD
1 I I  1 I I
2 A F  2 A F
3 B C  3 B C
4 D B  4 D B
5 R D  5 R D
6 F G  6 F G
7 A B  7 A B

и новый:

> new
  O D F3  OD
1 F G 11 F G
2 D B  0 D B
3 R D 13 R D
4 F G 14 F G
5 A F 16 A F

Я хочу заменить старое значение F3 новым значением, основанным на общем OD.

Я попытался:

Old_new1<-merge(old,new, by = "OD")


Old_new2<- ifelse(old$OD %in%  new$OD,new$F3,old$F3 )
Old_new2<-data.frame(old,Old_new2)

Я хочу получить:

> old_new
      O D F3  OD F3_new
    1 I I  1 I I  1
    2 A F  2 A F 16
    3 B C  3 B C  3
    4 D B  4 D B  0
    5 R D  5 R D 13
    6 F G  6 F G 14
    7 A B  7 A B  7

Я хочу быть abel, чтобы конкурировать сначала за замену.

Спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

Мы могли бы использовать data.table join on 'OD' и присвоить (:=) значения столбца 'F3' в 'new' (i.F3) столбцу 'F3' в 'старый '

library(data.table)
new$F3 <- as.integer(new$F3) # as the class for old 'F3' is `integer`
setDT(old)[new, F3 := i.F3, on = .(OD)]
old
#   O D F3  OD
#1: I I  1 I I
#2: A F 16 A F
#3: B C  3 B C
#4: D B  0 D B
#5: R D 13 R D
#6: F G 14 F G
#7: A B  7 A B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...