3

簡単な質問です。探索的データ分析のために、さまざまな方法で変数をビニングしています。vardata.frame で呼び出される変数があるとしましょうdf

df$var<-c(1,2,8,9,4,5,6,3,6,9,3,4,5,6,7,8,9,2,3,4,6,1,2,3,7,8,9,0)

これまでのところ、次のアプローチを採用しています (以下のコード)。

#Divide into quartiles
df$var_quartile <- with(df, cut(var, breaks=quantile(var, probs=seq(0,1, by=.25)), include.lowest=TRUE))
# Values of var_quartile
> [0,3],[0,3],(7.25,9],(7.25,9],(3,5],(3,5],(5,7.25],[0,3],(5,7.25],(7.25,9],[0,3],(3,5],(3,5],(5,7.25],(5,7.25],(7.25,9],(7.25,9],[0,3],[0,3],(3,5],(5,7.25],[0,3],[0,3],[0,3]

#Bin into increments of 2
df$var_bin<- cut(df[['var']],2, include.lowest=TRUE, labels=1:2)
# Values of var_bin
> 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 2 1

私がやりたい最後のことは、変数を時系列順にソートした後、10 個の観測のセクションにビン化することです。これは、中央値を見つけた後の分割と同じアプローチ (中央の観測までカウントアップ) ですが、10 個の観測単位でカウントしたいだけです。

私の例を使用すると、これはvar次のセクションに分割されます。

0,1,1,2,2,2,3,3,3,3
4,4,4,5,5,6,6,6,6,7
7,8,8,8,9,9,9

NB -- この操作は非常に大きなデータセット (通常は 300 万から 600 万の観測データ) で実行する必要があります。

どうすればいいですか?ありがとう!

4

5 に答える 5

8

cut_number()from ggplot2は、数値ベクトルを等しい数のポイントを含む間隔にカットするように設計されています。あなたの場合、次のように使用できます。

library(ggplot2)
split(var, cut_number(var, n=3, labels=1:3))
# $`1`
#  [1] 1 2 3 3 2 3 1 2 3 0
# 
# $`2`
# [1] 4 5 6 6 4 5 6 4 6
# 
# $`3`
# [1] 8 9 9 7 8 9 7 8 9
于 2013-03-07T16:58:02.150 に答える
4
vec <- c(1,2,8,9,4,5,6,3,6,9,3,4,5,6,7,8,9,2,3,4,6,1,2,3,7,8,9,0) # your vector

nObs <- 10 # number of observations per bin

# create data labels
datLabels <- ceiling(seq_along(vec)/nObs)[rank(vec, ties.method = "first")] 


# test data labels:
split(vec, datLabels)

$`1`
 [1] 1 2 3 3 2 3 1 2 3 0

$`2`
 [1] 4 5 6 6 4 5 6 7 4 6

$`3`
 [1] 8 9 9 8 9 7 8 9
于 2013-03-07T15:36:54.083 に答える
1

このようなことを意味しますか?

x <- sample(100)
binSize <- 10
table(floor(x/binSize)*binSize)
于 2013-03-07T15:20:17.920 に答える
0

これでうまくいくはずです。

df$var_bin<- cut(df[['var']], breaks = Size(df$var/10), 
                 include.lowest=TRUE, labels=1:10)
于 2013-03-07T15:36:55.030 に答える