找到每一行的最高价值

时间:2020-06-08 14:29:14

标签: r

我有一个data.frame:

cities <- c("Nantes", "Paris", "London", "Munchen")
variable1 <- c(100, 20, 5, 30)
variable2 <- c(10, 13, 2, 30)
variable3 <- c(10, 200, 5, 300)

df <- data.frame(cities, variable1, variable2, variable3)

我的结果:

  cities variable1 variable2 variable3
1  Nantes       100        10        10
2   Paris        20        13       200
3  London         5         2         5
4 Munchen        30        30       300

我想要什么:

variable1 | Nantes 
variable2 | Munchen 
variable3 | Munchen

4 个答案:

答案 0 :(得分:1)

您可以在which.max中使用sapply来获取每列 max 的索引。

df[sapply(df[-1], which.max), 1]
#[1] "Nantes"  "Munchen" "Munchen"

并获得别名:

cbind(colnames(df)[-1], df[sapply(df[-1], which.max), 1])
#     [,1]        [,2]     
#[1,] "variable1" "Nantes" 
#[2,] "variable2" "Munchen"
#[3,] "variable3" "Munchen"

答案 1 :(得分:1)

类似于GKi的答案,但输出带有标签

apply(df[,-1], 2, function(x) df[which.max(x),1])

variable1 variable2 variable3 
   Nantes   Munchen   Munchen 

答案 2 :(得分:1)

带有tidyverse

的选项
library(dplyr)
library(tidyr)
df %>%
    summarise_if(is.numeric, which.max) %>% 
    pivot_longer(everything()) %>%
    mutate(value = df$cities[value])
# A tibble: 3 x 2
#  name      value  
#  <chr>     <chr>  
#1 variable1 Nantes 
#2 variable2 Munchen
#3 variable3 Munchen

答案 3 :(得分:1)

idx <- sapply(df[-1], which.max)
data.frame(vars = names(idx), cities = df[1][idx])

# vars  cities
# 1 variable1  Nantes
# 2 variable2 Munchen
# 3 variable3 Munchen