r - R中数据集中具有最小值和最大值的列名
问题描述
我有这个数据集:
Year January February March April May June July August
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2018 45 51 63 61 79 85 88 85
2 2017 51 60 65 69 75 82 86 84
3 2016 47 55 61 68 72 84 87 85
... with 20 more rows
我想得到与每行的最小值和最大值相对应的月份,以及最大值和最小值之间的差异。这是我的最小值和最大值代码,
x <- colnames(data)[apply(data[,c(2:9)],1,which.max)]
y <- colnames(data)[apply(data[,c(2:9)],1,which.min)]
data$MaxMonth <- x
data$MinMonth <- y
但是,它给了我 Year 作为某些 which.min 函数的输出。
Year January February March April May June July August MaxMonth MinMonth Diff
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2018 45 51 63 61 79 85 88 85 July January 43
2 2017 51 60 65 69 75 82 86 84 July Year 35
3 2016 47 55 61 68 72 84 87 85 July Year 40
... with 20 more rows
解决方案
我们可以用 整形为长格式,按“年”分组,得到“值”pivot_longer
对应的列名(用),然后与原始数据连接max/min
which.max/which.min
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -1) %>%
group_by(Year) %>%
summarise(maxMonth = name[which.max(value)],
minMonth = name[which.min(value)]) %>%
left_join(df, .)
推荐阅读
- cognos - Concur / Cognos Report Studio:始终使用 timepropmt 值过滤时间范围选项?
- xml - 使用 Powershell 进行 XML 解析
- c# - 使用 C# 的非 WPF 或 Win32 应用程序的 UI 自动化
- javascript - javascript中require()函数的问题
- java - 具有多个线程的 Kafka Producer - Java
- kubernetes - 同一命名空间中的两个 Kubernetes 部署无法通信
- aws-sam - API 网关通过 SAM 直接连接到 SNS
- neo4j - EXISTS 带有动态标签的密码查询
- javascript - 我如何粗略地匹配 Javascript 中的两个字符串?
- java - 如何从 JobService 中调用 fusedLocationClient.getLastLocation()?