2016-09-06 10 views
0

私は初心者です。私はパッケージ "DescTools"のトリム関数を使って変数をトリムしたいと思います。これは正常に動作します:R:変数をトリミングしてデータフレームに追加する

mydata <- data.frame(
a <- rnorm(40, mean = 0, sd = 1) 
) 
a_trim <- Trim(mydata$a, trim = 0.2, na.rm = TRUE) 

これはオブジェクトを作成しますが、私はそれをデータフレームmydataに追加したいと思います。私は

mydata$a_trim <- Trim(mydata$a, trim = 0.2, na.rm = TRUE) 

によってこれをしようとすると(それがトリミングされた変数であることから、明らかに)MYDATA $ a_trimがデータフレームよりも少ない行を持っているので、Rは私にエラーを与えます。これどうやってするの?

ご理解とご協力をいただきありがとうございます。

+0

を理解してください:トリムされた行の 'a'値をデータフレーム内のNAに設定したいのですか、またはそれらの行を削除しますか? –

+0

NAは細かいでしょう – 00schneider

+1

再現可能な例を使わずにRを使う方法であるので、私はこの質問を議論の終わりとして終えるように投票しています。 – gung

答えて

2

Trimは、あなたがしたいことには適していません。 は、meanまたはsdのようなものにそのベクトルを渡すことができるように、ベクトルから極値を削除します。これにより、外れ値の影響を受けずに計算できます。

極値をNAに設定するには、quantileを使用します。このポストを反映

upper_quantile <- quantile(mydata$a, 0.9) 
lower_quantile <- quantile(mydata$a, 0.1) 

# col a  where a > its 90th percentile becomes NA 
mydata$a[mydata$a > upper_quantile] <- NA 
mydata$a[mydata$a < lower_quantile] <- NA 
+1

こんにちは、ありがとうございます。私を悩ますことの1つ:上位10%をNAに変換した後、最も低い10%が更新された変数で計算されます。これは少なくとも、上位10%を変換すると、値の90%で計算されるため、最低10%の計算が変更されることを意味します。したがって、私はそれを平行して、または回避する必要があります。 – 00schneider

+1

うん!素晴らしいポイント!私は編集します –

+0

ありがとうございました! – 00schneider

0

私は属性"trim"としてトリミングされた要素のインデックスを返すように機能Trimを変更しました。 さて、あなたはまだあなたが簡単にトリミングする要素にラベルを付けたい場合しかし、あなたのような何かを行うことができ、バックトリミングベクトルを取得します:より良いに(DescTools 0.99.18以降)

a <- rnorm(40, mean = 0, sd = 1) 
a_trim <- Trim(mydata$a, trim = 0.2, na.rm = TRUE) 
data.frame(x=a, 
      trim=is.element(seq_len(length(a), attr(a_trim, "trim"))) 

関連する問題