R 如何从每列中选取n个顶部值并保存相应的行?

R 如何从每列中选取n个顶部值并保存相应的行?,r,dataframe,lapply,R,Dataframe,Lapply,我有一个大数据框架,我需要从每个列中选择3个最重要的值(顺序很重要),并保存相应的行号 names<- c("t1","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9") values1 <- c(2,3.1,4.5,5.1,6.5,7.1,8.5,9.11,10.1,11.8,12.3) values2 <- c(1,3.1,3,5.1,6.5,7.1,8.5,9.11,10.1,12,12) mydf<- dat

我有一个大数据框架,我需要从每个列中选择3个最重要的值(顺序很重要),并保存相应的行号

names<- c("t1","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9")
values1 <- c(2,3.1,4.5,5.1,6.5,7.1,8.5,9.11,10.1,11.8,12.3)
values2 <- c(1,3.1,3,5.1,6.5,7.1,8.5,9.11,10.1,12,12) 

mydf<- data.frame(names,values1,values2)
#@Juan Bosco has suggested  the followings which is great but gets confuses in this case where I have similar values...
idx <- lapply(2:3, function(col_index) { 
max_values <- sort(mydf[[col_index]], decreasing = T)[1:3]
sapply(max_values, function(one_value){
as.numeric(rownames(mydf[mydf[[col_index]] == one_value, ]))
 })
})

names下面返回三个最高值的行号,假设行名和行号相同,直接对
sort
的结果按降序进行子集设置

lapply(2:3, function(col_index) { 
      as.numeric(rownames(mydf[mydf[[col_index]] %in% sort(mydf[[col_index]], decreasing = T)[1:3], ]))
    })
编辑:

前一种方法不按特定顺序返回行号

下面添加到代码中的内容按顺序返回具有最高值的行号,从第一个最高值到第三个最高值

lapply(2:3, function(col_index) { 
  max_values <- sort(mydf[[col_index]], decreasing = T)[1:3]
  sapply(max_values, function(one_value){
    as.numeric(rownames(mydf[mydf[[col_index]] == one_value, ]))
  })
})

下面返回三个最高值的行号,假设行名和行号相同,则直接对
sort
的结果按降序进行子集设置

lapply(2:3, function(col_index) { 
      as.numeric(rownames(mydf[mydf[[col_index]] %in% sort(mydf[[col_index]], decreasing = T)[1:3], ]))
    })
编辑:

前一种方法不按特定顺序返回行号

下面添加到代码中的内容按顺序返回具有最高值的行号,从第一个最高值到第三个最高值

lapply(2:3, function(col_index) { 
  max_values <- sort(mydf[[col_index]], decreasing = T)[1:3]
  sapply(max_values, function(one_value){
    as.numeric(rownames(mydf[mydf[[col_index]] == one_value, ]))
  })
})

如何定义名称列的“最高值”?对于其余的列,因为它们是数字的,所以可以使用
max
。只要能够跟踪行号,我就可以删除该列。但是
max
只给出一个值,对吗?我想要n个最好的@Juan Boscoho您如何定义名称列的“最高值”?对于其余的列,因为它们是数字的,所以可以使用
max
。只要能够跟踪行号,我就可以删除该列。但是
max
只给出一个值,对吗?我想要n个最好的@Juan BoscoThis可以工作,但我需要结果按值排序,而不是按现在的行数排序。换言之,我希望每列的排名第一、第二和第三高,顺序很重要@胡安Bosco@Jack我添加了一个编辑,可以按顺序返回行号。感谢您的帮助@Juan Bosco。这很好,但当我们有两个相同的值时,它会变得混乱@如果一列中有两个值为最高值而绑定,则为Jack。你怎么点?需要遵循什么规则?在这种情况下没有规则!随机的就可以了。虽然我不希望在这种情况下选择任何较小的值。因此,如果有两个并列的最高,我们想选择两个在总应选择在任何顺序。Cheers@Juan BoscoThis有效,但我需要结果按值排序,而不是按现在的行数排序。换言之,我希望每列的排名第一、第二和第三高,顺序很重要@胡安Bosco@Jack我添加了一个编辑,可以按顺序返回行号。感谢您的帮助@Juan Bosco。这很好,但当我们有两个相同的值时,它会变得混乱@如果一列中有两个值为最高值而绑定,则为Jack。你怎么点?需要遵循什么规则?在这种情况下没有规则!随机的就可以了。虽然我不希望在这种情况下选择任何较小的值。因此,如果有两个并列的最高,我们想选择两个在总应选择在任何顺序。干杯@Juan Bosco