Заменить значения в файле на основе другого файла в R - PullRequest
0 голосов
/ 20 февраля 2020

Что у меня есть: У меня есть два фрейма данных. Они оба имеют одинаковые имена столбцов и строк и одинаковые размеры (равное количество строк и столбцов):

records <- read.table(text ="     D0  D1  D2  D3  
1  0       0     1    NA       
2  1       1     1    1       
3  1       0     NA    1       
4  0       NA     0    0", header = TRUE)

   covariate <- read.table(text ="     D0  D1  D2  D3  
1   70       1     6    3       
2  121       4     8    5       
3   86       3     2    4       
4  141       2     5    2", header = TRUE)

Что я хочу: Заменить указанные c значения в «Ковариатный» фрейм данных с NA. Заменяемые значения - это те, которые находятся в одном и том же месте и соответствуют тому, где «записи» имеют NA. Результат должен выглядеть следующим образом:

covariate_fixed <- read.table(text ="     D0  D1  D2  D3  
1   70       1     6    NA       
2  121       4     8    5       
3   86       3     NA    4       
4  141       NA     5    2", header = TRUE)

Ближайшие потоки, которые я мог найти в моей проблеме, были следующими: Заменить значения из другого кадра данных на идентификаторы и Заменить значения из другого кадра данных по идентификаторам Однако у меня нет совпадающих значений в обоих файлах, за исключением имен столбцов и строк, и правило для замены дается не указанным c идентификатором, а указанным c местоположением в данных Рамка. Я нашел и другие посты аналогичного характера, но ни одного, я не смог найти способ адаптироваться к моей конкретной проблеме c.

Может ли кто-нибудь помочь мне создать код на R для этого? Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 февраля 2020

is.na(covariate) <- is.na(records)

дает

> covariate
   D0 D1 D2 D3
1  70  1  6 NA
2 121  4  8  5
3  86  3 NA  4
4 141 NA  5  2

Советы:

  • is.na<- полезно для пропущенных вещей
  • DF и матрицы могут быть проиндексированы с помощью i,j или просто i, поэтому при одинаковых измерениях вам не нужно слишком задумываться о копировании атрибутов одного фрейма данных в другой.
0 голосов
/ 20 февраля 2020

Вот ты go. Этот код идет столбец за столбцом и просто заменяет числа в ковариатах значениями NA из записей.

for(i in 1:ncol(covariate)){
  covariate[is.na(records[,i]),i] <- records[is.na(records[,i]), i]
}

print(covariate)
...