【发布时间】:2017-02-23 22:57:48
【问题描述】:
数据框
rd2 <- data.frame(x = sample(1:100, 20), y = sample(1:100, 20), z
sample(1:100, 20))
# function I found in stackoverflow for finding the second largest value
maxN <- function(x, N = 2){
len <- length(x)
if(N > len){
warning('N greater than length(x). Setting N = length(x)')
N <- length(x)
}
sort(x,partial = len - N+1)[len - N+1]
}
# indexing values
rd2[, "axis1n"] <- apply(rd2[1:3], 1, function (x) max(x))
rd2[, "axis2n"] <- apply(rd2[1:3], 1, function (x) maxN(x))
rd2
x y z axis1n axis2n
1 56 63 84 84 63
2 50 45 13 50 45
3 79 21 43 79 43
4 33 46 33 46 33
5 46 26 12 46 26
6 55 47 11 55 47
7 85 76 85 85 85
8 43 56 48 56 48
9 17 67 92 92 67
10 37 43 59 59 43
11 21 89 27 89 27
12 57 44 25 57 44
13 27 20 88 88 27
14 63 62 44 63 62
15 80 14 46 80 46
16 88 54 54 88 54
17 16 97 65 97 65
18 48 83 77 83 77
19 77 17 53 77 53
20 47 64 70 70 64
你好,
我需要向这个数据框添加两列,其中:
轴 1: 对于每一行,与axis1n中的值匹配的列的列名(最大值)
轴2: 对于每一行,与axis2n中的值匹配的列的列名(第二大)
使用 max.col 可以轻松获取最大值的列名,但我需要一种可以为许多不同的索引值重现的方法,例如第二大值或给定的数字列表..
希望我说得通。请帮忙!
谢谢!!
【问题讨论】:
-
所以对于第 1 行,axis1 将是“z”,axis2 将是“y”
-
我需要能够通过使用任何给定的整数/整数列表来做到这一点......