处理在R中找到第n个最大值的索引的关系

时间:2015-03-01 15:29:13

标签: r

我正在处理数据帧并试图找到第n个最大值的索引(n因循环而变化),但是,在列中我绑定了值并且程序抛出了错误。下面是一个示例数据集。我基本上试图生成一个类似的数据帧,但只包含数据帧列向量中所有值的索引值。

对于输出DF,输出DF中的第1列将具有Refer_1元素的索引值,因此Output_DF [1,1]将具有最高值的索引,而Output_DF [10,1]将具有索引最低价值。以下是输入DF。

    Input       
1   17         
2   21          
3   13         
4   26          
5   204         
6   36         
7   14          
8   25          
9   45          
10  37          

Output (index values)
5
9
10
6
4
8
2
1
7
3

我目前正在使用哪个,取消列表和部分一起获取索引,但是,我无法纠正错误。请注意,关系可以与任何第n个最大值(不一定是列最大值)一起出现。

which(Consolidated_data_new[,i]==unlist(sort(Consolidated_data_new[,i],partial=j)[j]))

请注意,我希望代码一次只返回一个值,并在下一个循环迭代中处理第二个绑定值。

请帮忙解决这个问题。

此致

2 个答案:

答案 0 :(得分:2)

library(data.table)

 DT<-structure(list(Refer_1 = c(11L, 15L, 7L, 19L, 104L, 24L, 11L, 
22L, 39L, 19L), Refer_2 = c(17L, 21L, 13L, 25L, 204L, 36L, 14L, 
25L, 45L, 37L)), .Names = c("Refer_1", "Refer_2"), row.names = c(NA, 
-10L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000000130788>) 

DT[,lapply(.SD, order,decreasing=TRUE)]
    Refer_1 Refer_2
 1:       5       5
 2:       9       9
 3:       6      10
 4:       8       6
 5:       4       4
 6:      10       8
 7:       2       2
 8:       1       1
 9:       7       7
10:       3       3

答案 1 :(得分:2)

您的评论建议您正在使用包含多个列的数据框,并且您希望输出数据框的结果为order且每行都应用减少= TRUE:

> DF[2] <- sample(1:300, 10)
> DF[3] <- sample(1:300, 10)
> DF
   Input  V2 V3
1     17 210  3
2     21  72  4
3     13 263  1
4     26 249  6
5    204 223 10
6     36  83  7
7     14 107  2
8     25 295  5
9     45 198  9
10    37 112  8

> ordDF <- as.data.frame(lapply(DF, order, decreasing=TRUE))
> names(ordDF) <- paste0("res", 1:length(DF) )

> ordDF
   res1 res2 res3
1     5    8    4
2     9    3    9
3    10    4    2
4     6    5    7
5     4    1   10
6     8    9    8
7     2   10    1
8     1    7    6
9     7    6    3
10    3    2    5

> dput(ordDF)
structure(list(res1 = c(5L, 9L, 10L, 6L, 4L, 8L, 2L, 1L, 7L, 
3L), res2 = c(8L, 3L, 4L, 5L, 1L, 9L, 10L, 7L, 6L, 2L), res3 = c(4L, 
9L, 2L, 7L, 10L, 8L, 1L, 6L, 3L, 5L)), .Names = c("res1", "res2", 
"res3"), row.names = c(NA, -10L), class = "data.frame")