我有一个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
答案 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