Как заменить значение NA одного столбца значением, следующим за этим столбцом? - PullRequest
0 голосов
/ 16 декабря 2018

Вот некоторые примеры данных:

dat <- data.frame(col0 = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
       col1 = c(NA, 100, 100, NA, 200, 200, NA, 300, 300),
       col2 = c(1, 2, 3, 1, 2, 3, 1, 2, 3))

Я хотел бы изменить любое значение NA в col1, когда col2 = 1, со значением, которое следует за NA в col1.

лучшее, что я могу понять, это

dat <- dat %>% 
       mutate(col1 = replace(col1, which(is.na(col1) & 
              col2 == 1), 100))

Но я не мог понять, как получить следующее значение col1 ...

В идеале, решение будет использовать tidyverse.

Мой фактический набор данных довольно большой, поэтому замена NA в col1 на c (100, 200, 300) не будет эффективным способом для продолжения.

Ответы [ 2 ]

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

Опция, использующая na.locf

library(zoo)
dat$col1 <- na.locf(dat$col1, fromLast = TRUE)
dat$col1
#[1] 100 100 100 200 200 200 300 300 300
0 голосов
/ 16 декабря 2018

Мы можем использовать fill из пакета tidyr.

library(tidyr)

dat2 <- fill(dat, col1, .direction = "up")
dat2
#   col0 col1 col2
# 1    1  100    1
# 2    1  100    2
# 3    1  100    3
# 4    2  200    1
# 5    2  200    2
# 6    2  200    3
# 7    3  300    1
# 8    3  300    2
# 9    3  300    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...