Замените конкретное значение в ячейке фрейма данных R

У меня есть большой файл xlsx; Меня интересуют 2 столбца: pat_id и param_1.

Исходный файл выглядит так (я заменил значения точками, чтобы быстрее печатать):

     ......pat_id...........param_1..........
row1 ........123...............0.............
...
...
rowi ........456...............1.............     
...
rowk ........789...............5.............
...
rown ........................................

У меня есть файл меньшего размера:

pat_id | param_1
123        55
456        33
789        22

Я хочу заменить значения param1 в исходном файле значениями из файла меньшего размера. Нравится:

     ......pat_id...........param_1..........
row1 ........123...............55.............
...
...
rowi ........456...............33.............     
...
rowk ........789...............22.............
...
rown ........................................

Пока: 1) Я прочитал два файла в кадрах данных. 2) Затем я пытаюсь найти строку, где pat_id == 123, получить доступ к столбцу «param1» и присвоить новое значение (55).

Однако я сталкиваюсь с многочисленными ошибками.

Моя последняя версия:

data[data == 123, 'param1'] <- small_data[1, 'param1']

дает ошибку:

 Error in `[<-.data.frame`(`*tmp*`, data == curr_pat_id, column, value = "55") : 
  non-existent rows not allowed 

По какой-то причине, когда data[data == 123, 'param1'] возвращает NA...

Я пытался изучить альтернативы объединения/объединения, но не нашел подходящего решения.

По сути, я просто хочу сказать "где в данных pat_id == 123 замените его значение param_1 на 55".


person Saskia    schedule 09.08.2016    source источник
comment
Мы можем использовать match т.е. df1$param_1 <- df2$param_1[match(df1$pat_id, df2$pat_id)]   -  person akrun    schedule 09.08.2016
comment
@akrun Ваш код заменяет все остальные значения (кроме трех, которые меня интересуют) на NA.   -  person Saskia    schedule 10.08.2016
comment
У вас есть данные с .... Таким образом, это не воспроизводимо для других тестов.   -  person akrun    schedule 10.08.2016