2017-07-07 6 views
0

以下のコードを使用して、下限値2.5%を下回り、上限値97.5%を上回る変数値を特定の値に置き換えようとしました。オープンなデータファイルを提供します。外れ値2.5%、97.5%のコードエラーR

credit<-read.csv("http://freakonometrics.free.fr/german_credit.csv", header=TRUE) 
fun <- function(x){ 
    quantiles <- quantile(x, c(.025, .975)) 
    x[ x < quantiles[1] ] <- quantiles[1] 
    x[ x > quantiles[2] ] <- quantiles[2] 
    x 
} 
fun(credit) 

エラーメッセージが表示されます。

Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 
    undefined columns selected 

どうしたのですか?私はどんな助けにもうれしい!

+加算コメント

私は上記の機能は、データフレームに動作しないことが判明したが、ベクターでのみ動作します。

私は、次のコードでデータファイル内の各変数の外れ値を変更することができます。

しかし、私のデータファイルは、それを一つのコードいずれかを入力するのは不便であることを非常に多くの変数があります。

特定の値pmax & pminではない変数の異常値はどのように変更できますか?

+0

エラーは次のように、列を選択していないという問題があります。 'x'はデータフレーム全体です。 –

+0

@Rich Scriven 返事をありがとう。しかし、私はあなたが意味することを理解していません。コードで説明できますか? –

+0

'quantile(x、c(.025、.975))'が問題の行です。 'quantile(クレジット、c(.025、.975)) 'で試してください。どの列で ​​'quantile'を実行しようとしていますか?これは数値ベクトルでのみ機能し、データフレーム全体では機能しません。 –

答えて

0

実際に列に適用する限り、関数には問題はありません。 dplyrパッケージのmutate_atまたはmutate_all(実際にすべて列に適用する場合)を使用します。

library(dplyr) 
credit_trunc <- credit %>% 
    mutate_at(vars(Credit.Amount, Creditability), funs(fun)) 

または

credit_trunc <- credit %>% 
    mutate_all(funs(fun)) 

あるいはまた、あなたのデータフレームに別のタイプ(例えば要因、文字)の列を持っている場合は、あなたが使用することができます:

credit_trunc <- credit %>% 
    mutate_if(is.numeric, funs(fun)) 

このような何かこれにより、選択した/すべての列/すべての数値列を必要に応じて変更したデータフレームが戻されます。

+0

コードをチェックしましたか?あなたのコードを使用すると、 "mutate_impl(.data、dots)のエラー:要因が許可されていない"というエラーが表示されます。 –

+0

ええ、私はちょうどそれをもう一度走った。 mh .. read.csvでデータを読み込んでから関数を適用するまでの間にデータで何かしましたか? – friep

+0

ああ!ごめんなさい... 私の完全なコードは、データを要因の形で処理しました。しかし、因子型変数には外れ値が存在できないと思います。そうですか? –

関連する問題