2017-11-29 8 views
0

集計関数を使用してデータを集計しています。データはローンデータです。私はContractNumとLoanAmountを持っています。 StartDateでデータを集計し、ローン数とローン金額を数えたいと思います。R - サブリストを作成する集計関数

ContractNum <- c("RHL-1","RHL-2","RHL-3","RHL-3") 
StartDate <- c("2016-11-01","2016-11-01","2016-12-01","2016-12-01") 
LoanPurpose <- c("Personal","Personal","HomeLoan","Investment") 
LoanAmount <- c(200,500,600,150) 

dat <- data.frame(ContractNum,StartDate,LoanPurpose,LoanAmount) 



aggr.data <- aggregate(
    cbind(LoanAmount,ContractNum) ~ StartDate + LoanPurpose 
    ,data = dat 
    ,FUN = function(x)c(count = mean(x),length(x)) 
) 

私は集約関数の結果をルックアットとき、それはOKになります:ここで
は、データのサンプルと、私が使用している機能

> aggr.data 
    StartDate LoanPurpose LoanAmount.count LoanAmount.V2 ContractNum.count ContractNum.V2 
1 2016-12-01 HomeLoan    600    1    3.0   1.0 
2 2016-12-01 Investment    150    1    3.0   1.0 
3 2016-11-01 Personal    350    2    1.5   2.0 

しかし、私が見たときに私は、各列に、私は通常と同じ方法でアクセスできるように、私はこのサブリストを取り除くにはどうすればよい

> str(aggr.data) 
'data.frame': 3 obs. of 4 variables: 
$ StartDate : Factor w/ 2 levels "2016-11-01","2016-12-01": 2 2 1 
$ LoanPurpose: Factor w/ 3 levels "HomeLoan","Investment",..: 1 2 3 
$ LoanAmount : num [1:3, 1:2] 600 150 350 1 1 2 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : NULL 
    .. ..$ : chr "count" "" 
$ ContractNum: num [1:3, 1:2] 3 3 1.5 1 1 2 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : NULL 
    .. ..$ : chr "count" "" 

:それのstrucutreは、サブリストを作成しているようですDFにアクセスできますか?コードでは意味のないContractNumの意味を教えてもらうことを了解しましたが、私はその列を取り除くことができます。

+0

なぜこれがダウンリストされましたか? – jmich738

+0

あなたのサンプルコードはおそらく動作しませんか? 'aggr.data'を作るときには') 'が余分にあります。 (私はdownvoter btwではない)。 – thelatemail

答えて

1

だけ行列をネスト解除するaggr.datado.call(data.frame, ...)を行うありがとうございます。

aggr.data <- do.call(data.frame, aggr.data); 
str(aggr.data); 
#'data.frame': 3 obs. of 6 variables: 
# $ StartDate  : Factor w/ 2 levels "2016-11-01","2016-12-01": 2 2 1 
# $ LoanPurpose  : Factor w/ 3 levels "HomeLoan","Investment",..: 1 2 3 
# $ LoanAmount.count : num 600 150 350 
# $ LoanAmount.V2 : num 1 1 2 
# $ ContractNum.count: num 3 3 1.5 
# $ ContractNum.V2 : num 1 1 2