2017-11-21 8 views
-1

私は13の変数と100000の観測値を含むデータセットを持っています。因子数の希少値の再組み込みR

item_colorと呼ばれる1つの列は、アイテムの色を示し、85レベルです。希少な色を再結合したいので、レベル数を減らすことができます。私の閾値は200です。したがって、データセットの色が200未満の場合は、「他の」カラーグループに入れたいと思います。

私は知っている、彼らの番号を見つけるためにlengthを使用することができます。しかし、私はコードを作成するための正しいロジックを見つけることができません。私はこれを書いた:

order$item_color <- 
    ifelse(length(order$item_color[order$item_color]) < 200, "Other", order$item_color) 

しかし、それは "他の"とすべての色を置き換えました。

+1

おそらく 'table'を使う方が簡単でしょう。もっと具体的な解決策が必要な場合は、再現可能なおもちゃの例を入力してください。 – lmo

答えて

0

@lmoで指摘されているように、tableを使用できます。また、将来的にサンプルデータを提供する必要があります。

ifelseを使用する必要はありません、あなたがテーブルに「その他」に200未満のカウントを持つすべての色を設定するために%in%を使用することができます。

# Create dummy data 
set.seed(1) 
item_color <- sample(c("red","blue","green"), 1000, replace = T) 
item_color[sample(1:1000,10)] <- "purple" 
item_color[sample(1:1000,10)] <- "yellow" 
item_color[sample(1:1000,10)] <- "orange" 
order <- data.frame(item_color = item_color, stringsAsFactors = F) 

table(order$item_color) 
# blue green orange purple red yellow 
# 337 321  10  10 312  10 

# The actual solution 
table_colors <- table(order$item_color) 
order[order$item_color %in% names(table_colors)[table_colors < 200],"item_color"] <- "Other" 

table(order$item_color) 
# blue green Other red 
# 337 321 30 312 

編集:あなたは名orderを使用 あなたdata.frameには、order()という基本関数もあります。既存の関数を上書きする名前は避けるべきです。

+0

あなたは正しいです。私はこれを考慮に入れます! – someone

+0

この回答が参考になった場合は、[this](https://stackoverflow.com/help/someone-answers):)を読んでみてください。 –

関連する問題