r - 使用行名在一行中查找最大值并报告找到的值和列名
问题描述
我有一个数据框,其中包含四个国家和三个变量 x、y、z。现在我正在尝试创建一个函数,该函数返回已定义行的最大值和包含该行中最大值的列名。
x y z
Sweden 1.6534561 0.11523404 0.2261730
France -1.2274320 -0.24096054 1.5096028
England -1.4503096 0.07227427 1.6740867
Spain 0.1867416 1.25318913 -0.7350560
问题是我不明白如何使用 row_name 来查找该行中的最大值。
my_function(row_name){
value=
column=
paste("Highest value is", value, "and it is in column", column)
}
例如
my_function("Sweden"
) 应返回“最大值为 1.6534561,在 x 列中”
解决方案
一种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"))
推荐阅读
- iphone - 如何在我的网站上播放 iPhone 5 到 X 版本的广播流?
- python - 在 pandas 中创建一个通用的 headers 字段
- android - Flutter 安装错误,“状态不佳:未来已完成”
- excel - 来自用户窗体的按钮执行抛出下标超出范围错误
- uwp - C++/CX:使用 Dispatcher 访问 UI 线程不起作用
- c - 使用 printf 在 C 中打印浮点数/双精度时指定精度
- javascript - 找不到使用 Browserify 创建的模块
- angular - Nginx反向代理不改变主机
- javascript - 从javascript中的多维数组中删除特定列
- python - Linear regression with positive coefficients for SOME of the features in Python