R-按行查找第一,第二和第三最大值

时间:2019-07-25 10:53:37

标签: r dataframe

我有一些包含数字列的数据:

df <- data.frame(v1 = c(0,1,2,3,4,5,6,7,8), v2 = c(5,6,3,21,24,7,8,9,6), v3 = c(23,5,24,87,6,32,5,48,6),v4 = c(2,32,6,58,5,21,4,5,87), v5 = c(5,23,65,86,4,12,115,5,24))

我需要创建三个新列,每列分别包含第一,第二和第三最大值。因此所需的输出将是这样:

  v1 v2 v3 v4  v5 first second third
1  0  5 23  2   4  23     5      4
2  1  6  5 32  23  32     23     6
3  2  3 24  6  65  65     24     6
4  3 21 87 58  87  87     86     58
5  4 24  6  5   4  24     6      5
6  5  7 32 21  12  32     21     12
7  6  8  5  4 115  115    8      6
8  7  9 48  5   5  48     9      5
9  8  6  6 87  24  87     24     8

有什么简单的方法吗? 我可以用which.max来获得最大值,只是找到使我感到困惑的第二和第三最大值

2 个答案:

答案 0 :(得分:2)

您可以使用

# add the columns
df <- cbind.data.frame(df, t(apply(df, 1, function(row_i){
                             sort(row_i, decreasing = TRUE)[1:3]})))
# name the columns
names(df)[(ncol(df)-2):ncol(df)] <- c("first", "second", "third")

# see results
df
  v1 v2 v3 v4  v5 first second third
1  0  5 23  2   4  23     5      4
2  1  6  5 32  23  32     23     6
3  2  3 24  6  65  65     24     6
4  3 21 87 58  87  87     86     58
5  4 24  6  5   4  24     6      5
6  5  7 32 21  12  32     21     12
7  6  8  5  4 115  115    8      6
8  7  9 48  5   5  48     9      5
9  8  6  6 87  24  87     24     8

答案 1 :(得分:0)

您可以像这样使用apply

df$first <- apply(df, 1, max)
df$second <- apply(df, 1, function(x) -sort(-x[1:5])[2])
df$third <- apply(df, 1, function(x) -sort(-x[1:5])[3])

v1 v2 v3 v4  v5     first second third
1  0  5 23  2   5    23      5     5
2  1  6  5 32  23    32     23     6
3  2  3 24  6  65    65     24     6
4  3 21 87 58  86    87     86    58
5  4 24  6  5   4    24      6     5
6  5  7 32 21  12    32     21    12
7  6  8  5  4 115   115      8     6
8  7  9 48  5   5    48      9     7
9  8  6  6 87  24    87     24     8