5

次のような一連のデータがあります。

annual_exp<-as.data.frame(c(6000,4200,240001,750,20000,3470,10500,2400,2280,36000,3600,20000,2000,12000,1200,3000,4500,64000))
annual_exp<-as.data.frame(annual_exp)

「五分位」と呼ばれる新しい変数を作成したいと思います。これは、収入支出 (annual_exp) のどの五分位に該当するかに応じて、各観測値に 1 から 5 までの整数を割り当てます。したがって、1 から 5 までの数は等しいはずです。

これまでの私の試みは、次のことを行うことでした。

test<-quantile(annual_exp$annual_exp, probs= seq(0,1,0.2), na.rm=TRUE)
summary(test)
test

breaks<-c(test[1],test[2],test[3],test[4],test[5],test[6])
quantiles<-cut(annual_exp$annual_exp, breaks, labels=c("1","2","3","4","5"), include.lowest=TRUE, right=TRUE)
quantiles<-as.data.frame(quantiles)
quantiles<-cbind(annual_exp, quantiles)

問題 (この例で作成されたような小さなサンプルでは実際には表示されません) は、これを行うことによって各分位に入る人の数が大幅に変動することです。これは、上記の「分位数」関数を使用したためです。

そのため、私は方程式の「分位数」部分に代わるものを探しています。これは、年間支出に基づいてサンプルを 5 つの等しい分位数グループに分割します。

これに関する任意のヘルプは非常に高く評価されます!

4

2 に答える 2

11

ggplot2には、必要なことを実行する優れたユーティリティ関数がcut_number()あります。

library(ggplot2)
as.numeric(cut_number(annual_exp[[1]], n = 5))
# [1] 3 3 5 1 4 2 4 2 1 5 3 4 1 4 1 2 3 5
于 2012-08-28T15:42:33.250 に答える
3

おそらく最速のソリューションであるパッケージを使用したdata.tableソリューションです(大きなデータセットを扱っている場合は大きな懸念事項です)

library(data.table)

setDT(data)

data[ , newVarDecile := cut(varIncome,
                            breaks=quantile(varIncome,
                            probs=seq(0, 1, by=0.1), na.rm=T),
                            include.lowest= TRUE, labels=1:10) ]

異なるサブグループの十分位数を個別に計算する場合は、 を含めるだけですby =

data[ , newVarQuintiles := cut(varIncome,
                               breaks=quantile(varIncome,
                               probs=seq(0, 1, by=0.2), na.rm=T),
                               include.lowest= TRUE, labels=1:5), 
                               by = groupVar ]

ps。この 2 番目の例では、probsとのlabels引数を変更して収入の五分位数を計算したことに注意してください。

于 2015-09-07T16:54:47.153 に答える