2017-08-01 11 views
0

機械学習タスクを試みている。したがって、私は私のデータを変換する必要があります。 (全く不十分な番号が存在しない):例えばY変数を因子に変更し、情報を失う。

df$target 
9.0 
8.0 
6.0 
6.5 

しかし数字はお互いに閉じるようにした:

ターゲット変数は数値です。クラス=数値

> df$target <- cut(df$target, 4) 
> levels(df$target) <- c("Bad", "Neutral", "Good", "Amazing") 

ので、私はそれらの要因(それはMLのために必要とされる)製:したがって、私は、内の数字を変更し

のdf $ターゲット< - as.factor(DFの$ターゲット)

しかし、私はラベルをチェックすると、私が作ったとして、彼らはレベルで応答していないことを見るのは興味深いですが、と:

>unique(df$target) 
>[1] 42613 42475 42399 42536 42735 42521 

私は4つのユニークなラベルである必要があります:不良、ニュートラル、良いと驚くべき。それはどのように機能していない可能性がありますか?さらに優れています。この問題をどうやって解決できますか?

+1

に問題は私が< 'DF $ターゲット1あなたの方法を試した - カット(DFの$ターゲット、 df $ target1# [1] Amazing Good Bad Bad レベル:悪いニュートラル良い非常に素晴らしい(4) レベル(df $ target1)< - c( "悪い"、 "ニュートラル"、 "良い" 'それは'数値 'に変更されていません。別のことをしましたか – akrun

+0

私が追加したのは、colnames(df)< - c( "...."、 "target") –

+0

'cut'が' factor'を出力するので、 'df $ target < - as.factor(df $ target) 'です。あなたがやっていることが他にない限り。 –

答えて

0

より良い回答を得るには、再現可能な例を最小限にする必要があります。あなたは正しいことをしているようですが、どういうわけかあなたのデータフレームは更新されません。

この例では、私の作品:

# Create come toydata 
df <- data.frame(target = rnorm(6)) 

print(df$target) # A numeric 
#[1] -0.6194364 1.8817725 1.2898545 0.8297128 0.7837745 0.1337996 

df$target <- cut(df$target, breaks = 4) # Now a factor with 4 levels but with wrong labels 
print(df$target) 
#[1] (-0.622,0.00587] (1.26,1.88] (1.26,1.88] (0.631,1.26] (0.631,1.26] (0.00587,0.631] 
#Levels: (-0.622,0.00587] (0.00587,0.631] (0.631,1.26] (1.26,1.88] 

levels(df$target) <- c("c1", "c2", "c3", "c4") # Update labels 
print(df$target) 
#[1] c1 c4 c4 c3 c3 c2 
#Levels: c1 c2 c3 c4 
ここで同じ
0

...このコード

library(data.table) 
A = data.table(B = 1:10) 
A[,B:= cut(B,4)] 
levels(A$B) = letters[1:4] 
unique(A$B) 
関連する問題