获取与另一列的最大值相关的列的最小值

时间:2014-04-29 17:42:18

标签: r dataframe max min

我有一个关于data.frame中值的处理的问题。 以下data.frame将获取与第二列的最大值位于同一行中的第一列的值。 如果第二列中有多个相等的最大值,我想在第一列中返回它们的最小值

    power   total   found
1   31.0    7   7
2   30.5    8   7
3   30.0    9   8
4   29.5    9   8
5   29.0    9   7
6   28.5    8   7
7   28.0    10  8
8   27.5    10  8
9   27.0    10  8
10  26.5    11  9
11  26.0    11  9
12  25.5    9   8
13  25.0    9   9
14  24.5    8   8
15  24.0    10  9
16  23.5    8   7
17  23.0    9   8
18  22.5    7   7
19  22.0    7   7
20  21.5    7   7
21  21.0    4   4
22  20.5    4   4
23  20.0    3   3
24  19.5    2   2
25  19.0    2   2
26  18.5    2   2
27  18.0    2   2
28  17.5    1   1
29  17.0    1   1
30  16.5    0   0
31  16.0    0   0
32  15.5    0   0
33  15.0    0   0

1 个答案:

答案 0 :(得分:1)

# Create some fake data
set.seed(14)
df = data.frame(power = sample(seq(15,31,0.5),30, replace=TRUE), 
     total= sample(c(0,1,2,3,7:11), 30, replace=TRUE), 
     found=sample(c(0:2,7:9), 30, replace=TRUE))

df$total[c(5,9)] = NA  # Add some missing data

# Minimum of `power` at maximum of `total`
min(df$power[df$total==max(df$total, na.rm=TRUE)], na.rm=TRUE)
[1] 17.5

如果您希望power的所有值都显示为总的最大值:

df$power[df$total==max(df$total, na.rm=TRUE)]
[1]   NA   NA 17.5 25.0 30.5 31.0

如果您不想返回缺失值,可以使用which函数:

df$power[which(df$total==max(df$total, na.rm=TRUE))]
[1] 17.5 25.0 30.5 31.0

which仅返回逻辑测试为TRUE的行索引,而逻辑测试仅返回值TRUEFALSE或{{1每一行都有。