set.seed(123)
df <- data.frame(A = runif(5), B = runif(5))
df
A B
1 0.2875775 0.0455565
2 0.7883051 0.5281055
3 0.4089769 0.8924190
4 0.8830174 0.5514350
5 0.9404673 0.4566147
Индексирование строк, где df$A < df$B
равно TRUE
, и установка значений столбцов c("A", "B")
в c(NA, NA)
df[df$A < df$B, c("A", "B")] <- c(NA, NA)
df
теперь:
A B
1 0.2875775 0.0455565
2 0.7883051 0.5281055
3 NA NA
4 0.8830174 0.5514350
5 0.9404673 0.4566147
Редактировать: Обработка дел NA
set.seed(123)
df <- data.frame(A = runif(5), B = runif(5))
df[c(1, 5), 1] <- NA
df[c(1, 4), 2] <- NA
df
A B
1 NA NA
2 0.7883051 0.5281055
3 0.4089769 0.8924190
4 0.8830174 NA
5 NA 0.4566147
Установить A
и B
на NA
:
df[is.na(df$A) | is.na(df$B) | df$A < df$B, c("A", "B")] <- c(NA, NA)
A B
1 NA NA
2 0.7883051 0.5281055
3 NA NA
4 NA NA
5 NA NA
или :
Игнорировать строки с NA
в A and/or
B`:
set.seed(123)
df <- data.frame(A = runif(5), B = runif(5))
df[c(1, 5), 1] <- NA
df[c(1, 4), 2] <- NA
df
df[!is.na(df$A) & !is.na(df$B) & df$A < df$B, c("A", "B")] <- c(NA, NA)
A B
1 NA NA
2 0.7883051 0.5281055
3 NA NA
4 0.8830174 NA
5 NA 0.4566147