2016-10-19 30 views
-1

以下のデータセットの仮定:which.max(maydata$Y)またはwhich.min(maydata$Y)を使用して、Yの最大値または最小値であるかを調べることがRのX、Y値のデータセットでXの範囲を指定して、Yの最小値を調べる方法?

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 

その非常に簡単。

特定のXの範囲が指定されている場合、Yの値を調べたいと思います。何か(私はこれが正しい構文ではありません知っている)のような:

which.min(profile_data1[profile_data1$X1>8 & profile_data1$X1 >20 ][2]) 
+1

'which.max(DF [$ DF X> 5&DF $ X < 14、 "Y"]))。インデックスを返すので、値を必要とするなら 'df $ Y []'にネストする必要があります – Haboryme

+0

@Haboryme素早い返答をありがとう。 ( –

+0

@Haboryme私はそれを使用することができます... 'mydata [which.max(mydata [mydata $ X] 5&mydata $ X <14、 "Y"]この行番号はYの値ではありません。 )、] [2] ' –

答えて

3

次のコマンドを使用することができますフィンにD Yの最大値は、X > 8 & X < 20を与えられた:ここ

max(subset(dat, X > 8 & X < 20, select = "Y")) 
# [1] 16 

datは、データフレームの名前です。

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 

EDIT:

理解しやすいように:

> 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 
+0

Xiaotao Luoあなたの答えはありがとうございましたが、私の意見では、 @Haborymeは理解して実装するのがずっと簡単です。 –

+0

'df $ Y [df [df $ X> 5&df $ X <14、" Y "])]' –

+0

私の誤りは、元のデータフレームの行インデックスをその値にしたいと思ったのです。 –

3

Xiaotao Luoが間違いを指摘した場合、正しい値が出力されます。

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"]:20> X> 8
which.max(df[df$X > 8 & df$X < 20,"Y"])すべてYを選択します。ここでは、最大Yのインデックス、=
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インデックス作成の仕組みを理解するのに役立ちます。

+0

素晴らしい比較。 @ハボリメ –

2

またはこの:

max(df[with(df, X>=10 & X<=22),]$Y) 
#[1] 16 

OR %in%使用:

max(subset(df, X %in% 10:22)$Y) 

OR match使用:

max(df[with(df, !is.na(match(X, 10:22))),]$Y) 
関連する問題