2016-10-18 10 views
1

私は、dplyrをdcastで使用してテーブルのようなピボットを作成しました。これを行うより効率的な方法があれば興味があります。ピボットのようなテーブルのR

library(dplyr) 
library(reshape2) 

state.x77 <- as.data.frame(state.x77) 

state.x77$Population_bucket <- ifelse(state.x77$Population >= 
10000,'Large',ifelse(state.x77$Population >= 1000,'Medium',"Small")) 
state.x77$Income_bucket <- ifelse(state.x77$Income >= 
4700,'High',ifelse(state.x77$Income >= 4100,'Medium',"Low")) 

dcast(state.x77 %>% 
group_by(Income_bucket, Population_bucket) %>% 
summarise(sum(Area)), 
Income_bucket ~ Population_bucket) 
+0

'(Income_bucket 、Population_bucket)、sum)) 'あなたは幸せではないでしょうか? – rawr

+0

これを行うより効率的な方法があるかどうかが分かります。私はこれを機能させたいと思う。助けてもらえますか? – blakeowens15

答えて

0

ありRに、このようなテーブルを作成するには、いくつかの方法があり、dcastは細かいものです。コーディングに関しては、ifelseの代わりにcut関数を使用してグループ化列を作成し、グループ化をdplyrチェーン内で行うことができます。また、dcastの内部にチェーンを含めるのではなく、チェーンの最後にdcastを呼び出す方がより明確な場合があります。たとえば、次のように

labs = c("Small","Medium","Large") 

state.x77 %>% 
    group_by(Population_bucket = cut(Population, breaks=c(0, 1000, 10000, Inf), 
            labels= labs, right=FALSE), 
      Income_bucket = cut(Income, breaks=c(0, 4100, 4700, Inf), 
           labels=labs, right=FALSE)) %>% 
    summarise(sum(Area)) %>% 
    dcast(Income_bucket ~ Population_bucket) 
Income_bucket Small Medium Large 
1   Small 9267 740233  NA 
2  Medium 411498 662657 348075 
3   Large 754001 351123 259940 

あなたが人間によって読み取られる出力テーブルを作成したい場合は、千単位の区切りで、言って、値をフォーマットすることができます。

summarise(format(sum(Area), big.mark=",")) %>% 

をし、出力は次のようになります:その場合は、summarise行は次のように変更します

(state.x77、tapply(エリア、リストと
Income_bucket Small Medium Large 
1   Small 9,267 740,233 <NA> 
2  Medium 411,498 662,657 348,075 
3   Large 754,001 351,123 259,940 
関連する問題