假设下面的数据集:
X Y
2 10
4 8
6 12
8 5
10 16
12 10
14 14
16 12
18 8
20 5
22 14
24 18
26 2
28 4
30 6
使用which.max(maydata$Y)
或which.min(maydata$Y)
很容易找出Y的最大值或最小值。
我想在给出特定范围的X时找出Y的值。像(我知道这不是正确的语法):
which.min(profile_data1[profile_data1$X1>8 & profile_data1$X1 >20 ][2])
答案 0 :(得分:3)
您可以使用以下命令查找给定Y
的{{1}}的最大值:
X > 8 & X < 20
此处,max(subset(dat, X > 8 & X < 20, select = "Y"))
# [1] 16
是数据框的名称。
答案 1 :(得分:3)
df[df$X > 8 & df$X < 20,"Y"][which.max(df[df$X > 8 & df$X < 20,"Y"])]
解释因为它变得漫长而令人困惑:
df[df$X > 8 & df$X < 20,"Y"]
:选择所有Y> 20> X&gt; 8
which.max(df[df$X > 8 & df$X < 20,"Y"])
:此处的最大Y,= 1 的索引
df[df$X > 8 & df$X < 20,"Y"]
:与之前相同的子集,它是向量
在这种情况下,df[df$X > 8 & df$X < 20,"Y"][which.max(df[df$X > 8 & df$X < 20,"Y"])]
相当于:df[df$X > 8 & df$X < 20,"Y"][1]
,所以我们只选择向量的第一个值。
Sven Hohenstein的解决方案更高效,更容易实现,但希望这有助于您了解R索引的工作原理。
答案 2 :(得分:2)
尝试(获取最大Y
的行索引8 < X < 20
):
> as.numeric(row.names(df[df$X > 8 & df$X < 20, ])[match(max(df[df$X > 8 & df$X < 20, "Y"]), df[df$X > 8 & df$X < 20, "Y"])])
结果(原始数据框中的行索引):
[1] 5
如果您想要值:
> df[as.numeric(row.names(df[df$X > 8 & df$X < 20, ])[match(max(df[df$X > 8 & df$X < 20, "Y"]), df[df$X > 8 & df$X < 20, "Y"])]), "Y"]
结果(值):
[1] 16
修改强>
更容易理解:
> Sub.df <- df[df$X > 8 & df$X < 20, ]
> Sub.df
X Y
5 10 16
6 12 10
7 14 14
8 16 12
9 18 8
> result.index <- as.numeric(row.names(Sub.df)[match(max(Sub.df$Y), Sub.df$Y)])
> result.index
[1] 5
> result.value <- df[result.index, "Y"]
> result.value
[1] 16
答案 3 :(得分:2)
或者这个:
max(df[with(df, X>=10 & X<=22),]$Y)
#[1] 16
或使用%in%
:
max(subset(df, X %in% 10:22)$Y)
或使用match
:
max(df[with(df, !is.na(match(X, 10:22))),]$Y)