【问题标题】:Finding a maximum value in a row using row name and reporting the found value and column name使用行名在一行中查找最大值并报告找到的值和列名
【发布时间】:2019-09-28 12:50:56
【问题描述】:

我有一个数据框,其中包含四个国家和三个变量 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 列中”

【问题讨论】:

  • 如果这些答案有助于您解决问题,请接受所有先前问题的答案。当且仅当它是您认为的“最佳”解决方案时,您可以通过单击“勾选”来接受答案。

标签: r


【解决方案1】:

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"))

【讨论】:

    【解决方案2】:

    my_function(row_name){
    
    value=max(dataframe["row_name", ])
    for(i in c(1:length(a["row_name",])) {
    if(a["row_name",i] == value
    column=names(dataframe)[i]
    }
    paste("Highest value is", value, "and it is in column", column)
    }

    【讨论】:

      【解决方案3】:

      我创建了一个简单的数据集,它与您的不同但非常相似。

      数据

      df <- structure(list(x = 1:4, y = c(4, 8, 1, 6), z = c(3, 4, 1, 5)), class = "data.frame", row.names = c("Sweden", 
      "France", "England", "Spain"))
      

      该功能使用基本索引,需要您额外指定data.frame,如果您愿意,可以删除此功能。

      功能

      my_function <- function(Row, df){
       max <- max(df[Row, ])
       row <- which(df[Row, ] == max)
       paste("Highest value is", max, "and it is in column", names(df)[row])
      }
      
      > my_function("Sweden", df)
      [1] "Highest value is 4 and it is in column y"
      

      【讨论】:

        猜你喜欢
        • 2014-11-18
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 2015-07-07
        • 2021-05-26
        相关资源
        最近更新 更多