我正在处理数据帧并试图找到第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]))
请注意,我希望代码一次只返回一个值,并在下一个循环迭代中处理第二个绑定值。
请帮忙解决这个问题。
此致
答案 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")