У меня есть датафрейм с несколькими столбцами. Я уменьшил размер фрейма данных, чтобы проиллюстрировать мой запрос.
Один столбец «А» имеет полный набор из 6 значений. Остальные 5 столбцов с «v1» по «v5» случайным образом имеют 2 пропущенных значения, каждое из которых помечено NA.
df <- data.frame('A' = c(2, 4, 7, 5, 3, 4), 'v1' = c(3, NA, NA, 4, 5, 5),
'v2' = c(NA, NA, 6, 4, 5, 5), 'v3' = c(3, 4, NA, NA, 5, 5),
'v4' = c(3, 4, 6, 4, NA, NA), 'v5' = c(3, 4, 6, NA, NA, 5))
A v1 v2 v3 v4 v5
1 2 3.00 1.75 3.00 3.00 3.00
2 4 3.55 3.55 4.00 4.00 4.00
3 7 6.25 6.00 6.25 6.00 6.00
4 5 4.00 4.00 4.45 4.00 4.45
5 3 5.00 5.00 5.00 2.65 2.65
6 4 5.00 5.00 5.00 3.55 5.00
Что я хотел бы сделать, это заполнить все NA в кадре данных, используя уравнение: -0,05 + 0,9 * х. Где x соответствует значению в столбце A в той же строке. Например:
Для строки 1 v1, где есть первый NA, Col A = 4. Поэтому я хотел бы, чтобы этот NA был заполнен следующим образом:
-0.05 + 0.9 * 4 = 3,55 ------- Заполнено 3,55
И для v1 строки 3 NA, где Col A = 7. Я бы хотел -0,05 + 0,9 * 7 = 6,25 ------ с 6.25
Я пытался использовать функцию ifelse (), но не знаю, как применить ее ко всему фрейму данных и связать ее с уравнением, которое использует значение из другого столбца в той же строке.
Моя попытка ниже, что, я знаю, неверно, но дает представление о моем подходе к ней:
ifelse(df$v1:v5 == NA, -0.05 + 0.9*df$A, df$v1:v5)