2017-04-22 9 views
1

上位30パーセンタイル、中位40パーセンタイル、下位30パーセンタイルに従って、特定の変数(コードではwt_avgと呼ばれます)を分類しようとしています。例えばR数量エラー - 置換はn行、データはp

-

"x" はデータであり、 "クラス" は、私が欲しいの出力である
structure(list(x = 1:10, class = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 
3)), .Names = c("x", "class"), row.names = c(NA, -10L), class = "data.frame") 

これは私が使っていたコードである - $<-.data.frame

エラー(*tmp*、 "状態"、値= cで(-13.38、-2.9725、 - 私は次のエラーを取得する

sent_data$wt_avg = with(sent_data, SENT_Orth_1 + SENT_Orth_2 + SENT_Orth_3) 
sent_data$state = quantile(sent_data$wt_avg, probs = c(0, 0.3, 0.7, 1) 
      na.rm = TRUE) 

を:交換は5行があり、データが603

私はこれをどのように修正することができます?ありがとう!

+0

「quantile」の出力はわずかに異なります。最初のベクトルと異なる長さの出力を返します。すなわち、 'quantile(1:10、c(0,0.3,0.7,1))# 0%30%70%100% 1.0 3.7 7.3 10.0'新しい列の代わりに集計されたデータセットとして – akrun

+0

ああ大丈夫です!私は 'if'条件を使用して、実際に分類するための "状態"変数を作成する必要がありますか?より速い方法がありますか?ありがとう! –

+0

再現可能なサンプルと予想される出力を追加しないと残念です。私は今質問を編集しました。 –

答えて

1

我々はcutquantileを使用することができますがありますまたはfindInterval

sent_data$newclass <- with(sent_data, findInterval(x, quantile(x, 
     probs = c(0, 0.3, 0.7, 1)), rightmost.closed = TRUE)) 
sent_data 
# x class newclass 
#1 1  1  1 
#2 2  1  1 
#3 3  1  1 
#4 4  2  2 
#5 5  2  2 
#6 6  2  2 
#7 7  2  2 
#8 8  3  3 
#9 9  3  3 
#10 10  3  3 
関連する問題