Вы можете использовать здесь идиому which(x == max(x))
и использовать apply()
, чтобы выполнить это для каждой строки:
apply(mydata[, -1], 1, function(x) which(x == max(x)))
, что дает:
> apply(mydata[, -1], 1, function(x) which(x == max(x)))
[[1]]
v4
4
[[2]]
v1 v2
1 2
[[3]]
v1
1
[[4]]
v2
2
[[5]]
v2
2
[[6]]
v2 v4
2 4
Список содержит векторыиндексов переменной (ей), которые являются максимальными, и имена этих векторов можно извлечь, используя names()
, чтобы дать действительный идентификатор переменной:
> out <- apply(mydata[, -1], 1, function(x) which(x == max(x)))
> names(out[[2]])
[1] "v1" "v2"
> lapply(out, names)
[[1]]
[1] "v4"
[[2]]
[1] "v1" "v2"
[[3]]
[1] "v1"
[[4]]
[1] "v2"
[[5]]
[1] "v2"
[[6]]
[1] "v2" "v4"
Если ваши данные могут содержать NA
, тогданам нужно быть немного умнее, например,
apply(mydata[, -1], 1,
function(x, na.rm = FALSE)
which(x == max(x, na.rm = na.rm)),
na.rm = TRUE)
, где мы можем указать, игнорировать ли NA
или нет.