我有一个关于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
答案 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
的行索引,而逻辑测试仅返回值TRUE
,FALSE
或{{1每一行都有。