A tidyverse
подход:
library(dplyr)
df %>%
mutate(ID= row.names(.)) %>%
tidyr::gather(key,val,-ID) %>%
group_by(ID) %>%
filter(val==max(val))
# A tibble: 4 x 3
# Groups: ID [4]
ID key val
<chr> <chr> <dbl>
1 Sweden x 1.65
2 Spain y 1.25
3 France z 1.51
4 England z 1.67
Для создания функции ( Обратите внимание, что для этого может потребоваться некоторая нестандартная оценка ),
max_finder <- function(df, target_id){
df %>%
mutate(ID= row.names(.)) %>%
tidyr::gather(key,val,-ID) %>%
group_by(ID) %>%
filter(val==max(val), ID ==target_id)
}
max_finder(df,"Sweden")
# A tibble: 1 x 3
# Groups: ID [1]
ID key val
<chr> <chr> <dbl>
1 Sweden x 1.65
Данные :
df<- structure(list(x = c(1.6534561, -1.227432, -1.4503096, 0.1867416
), y = c(0.11523404, -0.24096054, 0.07227427, 1.25318913), z = c(0.226173,
1.5096028, 1.6740867, -0.735056)), class = "data.frame", row.names = c("Sweden",
"France", "England", "Spain"))