Применение max
к числовым столбцам с правилом исключения.(Но решение @ nicola лучше.)
apply(dat[sapply(dat, is.numeric)], 1,
function(x) if (all(is.na(x))) NA else max(na.omit(x)))
# [1] 2 1 2 NA
Вы можете дополнительно обернуть это в пользовательскую функцию
row.max <- function(dat) {
return(apply(dat[sapply(dat, is.numeric)], 1,
function(x) if (all(is.na(x))) NA else max(na.omit(x))))
}
с использованием:
dat <- transform(dat, max=row.max(dat))
# Account eta1 eta2 eta3 eta4 eta6 grp grp1 max
# 1 123 NA 1 1 2 NA pol tree 2
# 2 456 NA NA NA NA 1 cal tre 1
# 3 789 NA NA NA 1 2 pal tre 2
# 4 111 NA NA NA NA NA trol tre NA
Данные
dat <- structure(list(Account = structure(c(2L, 3L, 4L, 1L), .Label = c("111",
"123", "456", "789", "Account"), class = "factor"), eta1 = c(NA_real_,
NA_real_, NA_real_, NA_real_), eta2 = c(1, NA, NA, NA), eta3 = c(1,
NA, NA, NA), eta4 = c(2, NA, 1, NA), eta6 = c(NA, 1, 2, NA),
grp = structure(c(4L, 1L, 3L, 5L), .Label = c("cal", "grp",
"pal", "pol", "trol"), class = "factor"), grp1 = structure(c(3L,
2L, 2L, 2L), .Label = c("grp1", "tre", "tree"), class = "factor")), row.names = c(NA,
-4L), class = "data.frame")