library(tidyverse)
df <- tibble(Date = c(rep(as.Date("2020-01-01"), 3), NA),
col1 = 1:4,
thisCol = c(NA, 8, NA, 3),
thatCol = 25:28,
col999 = rep(99, 4))
#> # A tibble: 4 x 5
#> Date col1 thisCol thatCol col999
#> <date> <int> <dbl> <int> <dbl>
#> 1 2020-01-01 1 NA 25 99
#> 2 2020-01-01 2 8 26 99
#> 3 2020-01-01 3 NA 27 99
#> 4 NA 4 3 28 99
Мой фактический фрейм данных R содержит сотни столбцов, которые не имеют точных имен, но могут быть аппроксимированы приведенным выше фреймом df
.
Я хочу заменить все значения NA
с 0
, за исключением нескольких столбцов (в моем примере я хочу опустить столбец Date
и столбец thatCol
. Я хотел бы сделать это следующим образом:
df %>% replace(is.na(.), 0)
#> Error: Assigned data `values` must be compatible with existing data.
#> i Error occurred for column `Date`.
#> x Can't convert <double> to <date>.
#> Run `rlang::last_error()` to see where the error occurred.
А мои неудачные идеи для выполнения «все, кроме» замены NA показаны ниже.
df %>% replace(is.na(c(., -c(Date, thatCol)), 0))
df %>% replace_na(list([, c(2:3, 5)] = 0))
df %>% replace_na(list(everything(-c(Date, thatCol)) = 0))
Есть ли способ выбрать все, НО так, как мне нужно? Есть сотни столбцов именуется непоследовательно, поэтому вводить их по одному не практично.