Мы могли бы сделать это с split.default
df1[-1] <- do.call(cbind, lapply(split.default(df1[-1],
cumsum(!grepl('flag', names(df1)[-1]))),
function(x) {
x[x[[2]] != 'G', ] <- NA
x}))
df1
# date pm2.5 pm2.5_flag NEPH NEPH_flag NEPH_RH NEPH_RH_flag
#1 2020-02-04 00:00:00 26.8 G 1.02 G 35.8 G
#2 2020-02-04 00:01:00 NA <NA> NA <NA> 35.7 G
#10 2020-02-04 00:09:00 NA <NA> 0.72 G 35.0 G
data
df1 <- structure(list(date = c("2020-02-04 00:00:00", "2020-02-04 00:01:00",
"2020-02-04 00:09:00"), pm2.5 = c(26.8, 27.1, 27.8), pm2.5_flag = c("G",
"C", "C"), NEPH = c(1.02, 0.98, 0.72), NEPH_flag = c("G", "BIA",
"G"), NEPH_RH = c(35.8, 35.7, 35), NEPH_RH_flag = c("G", "G",
"G")), class = "data.frame", row.names = c("1", "2", "10"))