【问题标题】:r finding 2nd minimum in row of a data frame and getting column indexr 在数据框的行中找到第二个最小值并获取列索引
【发布时间】:2017-09-19 13:10:15
【问题描述】:

我的代码如下。它在最小值所在的行和列名称中找到最小值。如何修改我的代码以获取第 2、第 3、第 4、第 5 个最小值和相应列名的值?

x = t( data.frame(c(11,12,1,14,15)) )
colnames(x)=c('a','b','c','d','e')
minimum = apply(x, 1, min)
minimum
index = colnames(x)[apply(x, 1, which.min)]
index

-------------------更新1

我尝试了下面的代码。 myans_a 有 5 列。但是代码失败了

#function to find second minimum and associated class name
min <- function(x,n) {
  value = sort(x, FALSE)[n]
  column_name = colnames(x)[which(x == value, arr.ind = TRUE)[2]]
  paste0("Column:",column_name," , Value:",value)
}


myans_a=myans[,c(1:5)]
min(myans_a,3)


> min(myans_a,3)
 Show Traceback

 Rerun with Debug
 Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 
  undefined columns selected 

【问题讨论】:

  • 试试sort,即apply(x, 1, function(x) names(sort(x)[2]))
  • 看看1 & 2

标签: r row minimum


【解决方案1】:

就这个:

colnames(x)[apply(x, 1, order)]
#[1] "c" "a" "b" "d" "e"

【讨论】:

    【解决方案2】:

    您可以使用以下功能
    这里 n第 n 个最小值

    第 1 步: 选取第 n 个值。由于数据是按升序排序的,所以是第n个最小值。
    步骤2:比较所有的值和第n个最小值,选择第n个最小值对应的列
    arr.value = 'TRUE' 显示条件为真时行号和列号的值。

    x = t( data.frame(c(11,12,1,14,15)) )
    colnames(x)=c('a','b','c','d','e')  
    
    min <- function(x,n) {
           value = sort(x, FALSE)[n]
           column_name = colnames(x)[which(x == value, arr.ind = TRUE)[2]]
           paste0("Column:",column_name," , Value:",value)
    }
    
    
    min(x,1) # first minimum value and corresponding column name 
    min(x,2) # second minimum value and corresponding column name
    ....  
    

    输出:
    如有任何疑问,请告诉我。

    【讨论】:

    • 如何获取列索引?
    • 我已将其合并到查询中。检查一下,如果您仍有任何疑问,请告诉我。
    • 我尝试使用min(myans[,c(0:5)],3),其中 myans 有前 5 列,我想从中找到最小值,但我收到错误 `[.data.frame(x, order(x, na.last) 中的错误= na.last, 递减 = 递减)) : 选择了未定义的列 `
    • "min(myans,3)" 将达到目的,因为列名已经在函数中进行了评估。查看代码。
    • 我附上一张图片作为输出?它对我来说非常好。检查您是否编写了完全相同的查询。
    【解决方案3】:

    正如 akrun 在下面的作品中所评论的那样。下面的代码将给出第二个最小值...

    minimum2=apply(dataframe_name, 1, function(x) (sort(x))[2])
    index2=apply(dataframe_name, 1, function(x) names(sort(x)[2]))
    

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 2018-05-20
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2021-08-31
      • 2017-09-25
      • 1970-01-01
      • 2015-07-22
      相关资源
      最近更新 更多