2017-06-18 2 views
-1

1から6000までの数字があり、以下のように分けてください。番号IN Rプログラミングの範囲と頻度を見つけるために登録

1-10 "" レンジ3" として20-30 "Range2の" として10-20 "レンジ1" のように。 。 。 5900から6000 "レンジ600" など。

私が欲しいです私は範囲が最も繰り返されるような周波数を計算したい10のように、最後に等しい時間間隔で範囲を計算する。

を我々はRプログラミングでこれを解決するにはどうすればよい。

+1

5990-6000を意味しますか? – Elin

+0

[入力例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)と期待される出力を提供してください。 – digEmAll

+0

'?cut'と'?seq'を参照してください –

答えて

0

をあなたはcut機能を使用する必要がありますtableは、各カテゴリのカウントを決定し、最も一般的な順に並べ替えることができます。

x <- 1:6000 
x2 <- cut(x, breaks=seq(1,6000,by=10), labels=paste0('Range', 1:599)) 
sort(table(x2), descending = TRUE) 
0

質問には数学的なトリックがあります。あなたが長さ10のカテゴリーを望むなら、ラウンド(x/10)は、0-5が0になるカテゴリーを作成し、6から14は1になり、15から24は2になります。 10、11-20などの場合、round((x + 4.1)/ 10)を使用できます。

は、最もエレガントなコード

は(私は4.1を使用する必要がなぜ私はそれがだ、なぜRラウンド(0.5)= 0が、ラウンド(1.5)= 2で知らない)多分最も簡単に理解することがここに例があります:

# Create randomly 50 numbers between 1 and 60 
x = sample(1:60, 50) 

# Regroup in a data.frame and had a column count containing the value one for each row 
df <- data.frame(x, count=1) 
df 

# create a new column with the category 
df$cat <- round((df$x+4.1)/10) 

# If you want it as text: 
df$cat2 <- paste("Range",round((df$x+4.1)/10), sep="") 
str(df) 

# Calculate the number of values in each category 
freq <- aggregate(count~cat2, data=df, FUN=sum) 

# Get the maximum number of values in the most frequent category(ies) 
max(freq$count) 

# Get the category(ies) name(s) 
freq[freq$count == max(freq$count), "cat2"] 
関連する問題