Поскольку это матрица, которую мы можем использовать apply
с margin = 2
(по столбцам).Здесь мы проверяем, имеет ли столбец хотя бы одно значение больше 70, и возвращаем его индекс, иначе возвращаем NA.
apply(mat > 70, 2, function(x) if (any(x)) which.max(x) else NA)
#V1 V2 V3 V4
# 2 3 6 NA
В идеале apply(mat > 70, 2, which.max)
дал бы вам то, что вам нужно, но он потерпел неудачу, когда у вас естьследовательно, нет элемента больше 70, проверка с условиями if
и any
.
Это также будет работать с фреймом данных.
Если элементов больше 70, а столбец имеет значения NA
, возвращается ошибка.
mat[1, 4] <- NA
apply(mat > 70, 2, function(x) if (any(x)) which.max(x) else NA)
Ошибка в if (any (x)) which.max (x) else NA: пропущенное значение там, где требуется TRUE / FALSE
В этом случаемы можем использовать na.rm
аргумент в any
, чтобы избежать этой ошибки.
apply(mat > 70, 2, function(x) if (any(x, na.rm = TRUE)) which.max(x) else NA)
#V1 V2 V3 V4
# 2 3 6 NA