Однако могут быть более эффективные способы решения этой проблемы, но здесь используется базовый подход R, использующий apply
, который заменяет только последние NA
s в строке на 0.
df[] <- t(apply(df, 1, function(x) {
y <- cumsum(!is.na(x))
replace(x, max(y) == y & is.na(x), 0)
}))
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1 1 0 1 NA 0 0 0 0 0 0
#2 1 0 1 NA 0 NA NA NA 0 0
#3 1 0 1 NA 0 NA NA NA 0 1
данные
Создан небольшой поддельный набор данных для работы.
df <- structure(list(V1 = c(1L, 1L, 1L), V2 = c(0L, 0L, 0L), V3 = c(1L,
1L, 1L), V4 = c(NA, NA, NA), V5 = c(0L, 0L, 0L), V6 = c(NA, NA,
NA), V7 = c(NA, NA, NA), V8 = c(NA, NA, NA), V9 = c(NA, 0L, 0L
), V10 = c(NA, NA, 1L)), class = "data.frame", row.names = c("1",
"2", "3"))
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1 1 0 1 NA 0 NA NA NA NA NA
#2 1 0 1 NA 0 NA NA NA 0 NA
#3 1 0 1 NA 0 NA NA NA 0 1