2016-04-05 2 views
0

私は、別の列に基づいて行のサブセットのみのデータフレーム内の列の関数を計算することに興味があります。Rでquantile()を計算するときに特定の行を除外する方法

たとえば、new_user_indicatorの列に「Y」または「N」があり、「Y」グループの分位数を知りたいとします。現在行っています

quantile(subset_df$limit_amount, .25) 
subset_df <- subset(carddata, new_user_indicator == "Y") 

サブセット化されたデータフレームを作成するのではなく、1つのコマンドでこれを行う方法はありますか?

私はthisを見て、コードの一部を解読できなかったかどうか調べました。

ありがとうございました

+0

'quantile(サブセット(carddata、new_user_indicator ==" Y ")$ limit_amount、.25)'はどうですか? – Frank

答えて

1

Quantile関数自体では、サブセットを操作することはできません。したがって、サブセットデータを抽出するには何らかの方法が必要です。

ただし、そうしたように、サブセットデータフレームを抽出することはお勧めしません。 quantileはベクトルを受け入れるので、データフレーム全体ではなく列をサブセット化するだけで済みます。

quantile(with(carddata, limit_amount[new_user_indicator == "Y"]), 0.25) 

with機能は、そうでない場合は、あなたが必要とする、エキス列を助け

quantile(carddatal$imit_amount[carddata$new_user_indicator == "Y"], 0.25) 

更新

あなたが繰り返しこれを行うにしている場合、関数(変化の関数名を書きますfooをお好きなものに)

foo <- function(df, out_var, in_var, in_level, prob) { 
    quantile(df[[out_var]][df[[in_var]] == in_level], prob) 
    } 

次に、あなたが行うことができます:

foo(carddata, "limit_amount", "new_user_indicator", "Y", 0.25) 

を私はout_var、そのレベルのためにあなたがここに

foo(carddata, "limit_amount", "new_user_indicator", "N", 0.25) 

を行うことができますので、あなたは、別のレベル "N" を持っていると仮定しています、in_varは、列名があります(したがって文字列)を出力変数と入力変数に使用します。 in_levelは入力変数のレベルです。そして、あなたはprobが何であるかを知っています。


あなたは私の機能を使用して、入力変数の0.25 のためのすべてののレベルをしたい場合は

より強力な方法はまだ愚かです。 x2に従ってにquantile(x1, ...)を適用するtapply

tapply(carddata$limit_amount, cardata$new_user_indicator, FUN = quantile, prob = 0.25) 

tapply(x1, x2, FUN, ...)使用してください。 x2に10レベルがある場合、それらのすべてに対して0.25分位数を取得します。

+0

クール!あなたが提供した詳細をありがとう。私はテストしてから承認するつもりですが、あなたが提供した情報に感謝します。 – Jazzmine

+0

テストはうまくいった。ご協力いただきありがとうございます。 – Jazzmine

関連する問題