小さいNSと列の割合をカウントするピボットビルラ(R) -- r フィールド と pivot-table フィールド 関連 問題

pivottabler Counting Small Ns and Row Percentages (R)












0
vote

問題

日本語

私はPivottablerパッケージに困難を持っていて、あなたが助けることができるかどうか疑問に思いました。

<事前> <コード> library(pivottabler) # perform the aggregation in R code explicitly trains <- bhmtrains %>% group_by(TrainCategory, TOC) %>% summarise(NumberOfTrains=n()) %>% ungroup() # display this pre-calculated data pt <- PivotTable$new() pt$addData(trains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", # << *** CODE CHANGE (AND BELOW) *** << type="value", valueName="NumberOfTrains", summariseExpression="sum(NumberOfTrains)") pt$renderPivot()

これはこの

のように見える素晴らしいピボット様テーブルを生成します

href="https://i.stack.imgur.com/4azrh.png" rel="nofollow noreferrer"> 画像の説明を入力します。ここで

誰もが行列のパーセントをどのように追加するかを知っていますか?

画像の説明を入力しますここで

TOCによって合計とTOC&AMPによって合計で列をマイデータセットに追加しました。トレーニングカテゴリー。私はそれから計算されたパーセンテージを取得しようとしましたが

<事前> <コード> #total calculations bhmtrains <- bhmtrains %>% + group_by(TOC) %>% + mutate(TOCCount = n()) bhmtrains <- bhmtrains %>% + group_by(TrainCategory) %>% + mutate(TrainCategoryCCount = n()) pt <- PivotTable$new() pt$addData(trains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", # << *** CODE CHANGE (AND BELOW) *** << type="value", valueName="NumberOfTrains", summariseExpression="sum(NumberOfTrains)") ##my attempt to calculate row percentage pt$defineCalculation(calculationName="Percent", caption="%", type="calculation", basedOn=c("TOCCount", "TrainCategoryCCount"), format="%.1f %%", calculationExpression="values$TOCCount/values$TrainCategoryCCount*100") pt$renderPivot()

と私はこのエラーを受けました:

<事前> <コード> rror in if (calc$type == "value") { : argument is of length zero

誰かが助けてくれることができますか?

英語

I was having difficulty with the pivottabler package and was wondering if you could assist.

library(pivottabler)  # perform the aggregation in R code explicitly trains <- bhmtrains %>%   group_by(TrainCategory, TOC) %>%   summarise(NumberOfTrains=n()) %>%   ungroup()  # display this pre-calculated data pt <- PivotTable$new() pt$addData(trains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains",  # <<  *** CODE CHANGE (AND BELOW) *** <<                      type="value", valueName="NumberOfTrains",                       summariseExpression="sum(NumberOfTrains)") pt$renderPivot() 

This produces a great pivot-like table that looks like this

enter image description here

Does anyone know how I can add a percent of row column like this?

enter image description here

I added columns to my dataset for total by TOC and Total by TOC & TrainCategory. I tried to get a percentage calculated from that but

#total calculations  bhmtrains <- bhmtrains %>% +     group_by(TOC) %>% +     mutate(TOCCount = n())  bhmtrains <- bhmtrains %>% +     group_by(TrainCategory) %>% +     mutate(TrainCategoryCCount = n())  pt <- PivotTable$new() pt$addData(trains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains",  # <<  *** CODE CHANGE (AND BELOW) *** <<                      type="value", valueName="NumberOfTrains",                       summariseExpression="sum(NumberOfTrains)") ##my attempt to calculate row percentage pt$defineCalculation(calculationName="Percent", caption="%",                       type="calculation", basedOn=c("TOCCount", "TrainCategoryCCount"),                       format="%.1f %%",                      calculationExpression="values$TOCCount/values$TrainCategoryCCount*100")     pt$renderPivot() 

And I received this error:

rror in if (calc$type == "value") { : argument is of length zero 

Can anyone assist?

</div
     

回答リスト

1
 
vote
vote
ベストアンサー
 

私はパッケージ作家です。

ピボットテーブルの本体の特定の%セルでは、そのカテゴリの列数(Express /普通)とすべてのカテゴリの数の両方が必要ですので、行の割合はもう少し複雑です。これに役立つバックログにはいくつかの機能強化があります。しかし、その間に、次のことが機能します(コードの後の説明):

<事前> <コード> getPercentageOfAllCategories <- function(pivotCalculator, netFilters, format, baseValues, cell) { trains <- pivotCalculator$getDataFrame("bhmtrains") netFilters$setFilterValues(variableName="TrainCategory", type="ALL", values=NULL, action="replace") filteredTrains <- pivotCalculator$getFilteredDataFrame(trains, netFilters) totalTrainsAllCategories <- nrow(filteredTrains) percentageOfAllCategories <- baseValues$N / totalTrainsAllCategories * 100 value <- list() value$rawValue <- percentageOfAllCategories value$formattedValue <- pivotCalculator$formatValue(percentageOfAllCategories, format=format) return(value) } library(pivottabler) pt <- PivotTable$new() pt$addData(bhmtrains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="N", summariseExpression="n()") pt$defineCalculation(calculationName="Percentage", caption="%", format="%.1f %%", basedOn="N", type="function", calculationFunction=getPercentageOfAllCategories) pt$renderPivot()

結果:

結果

これは、ピボットテーブルのセルごとに1回呼び出されるカスタム計算関数を定義することによって機能します。カスタム計算関数は、特定のセル(すなわちどのTOCとTOCとTRAINCATEGORY)のフィルタを取得し、次にカテゴリフィルタを上書きして列車分類基準をクリアします。その後、フィルタはデータフレームに適用され、結果として得られた行数、および百分率が計算されます。 計算ビネットには、カスタム計算機能に関する詳細情報があります。

 

I am the package author.

The row percentage is slightly more complex since in a given % cell in the body of the pivot table, you need both the number of trains of that category (Express/Ordinary) and the number of all categories. There are a couple of enhancements on the backlog that will help with this. But, in the meantime, the following will work (explanation after the code):

getPercentageOfAllCategories <- function(pivotCalculator, netFilters, format, baseValues, cell) {   trains <- pivotCalculator$getDataFrame("bhmtrains")   netFilters$setFilterValues(variableName="TrainCategory", type="ALL", values=NULL, action="replace")    filteredTrains <- pivotCalculator$getFilteredDataFrame(trains, netFilters)   totalTrainsAllCategories <- nrow(filteredTrains)   percentageOfAllCategories <- baseValues$N / totalTrainsAllCategories * 100   value <- list()   value$rawValue <- percentageOfAllCategories   value$formattedValue <- pivotCalculator$formatValue(percentageOfAllCategories, format=format)   return(value) }  library(pivottabler) pt <- PivotTable$new() pt$addData(bhmtrains)  pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="N", summariseExpression="n()") pt$defineCalculation(calculationName="Percentage", caption="%", format="%.1f %%", basedOn="N",   type="function", calculationFunction=getPercentageOfAllCategories) pt$renderPivot() 

Result:

results

This works by defining a custom calculation function that is invoked once per % cell in the pivot table. The custom calculation function gets the filters for a given cell (i.e. which TOC and TrainCategory), then overrides the category filter to clear the TrainCategory criteria. The filters are then applied to the data frame, the resulting number of rows counted and the percentage calculated. There is a little bit more information on custom calculation functions in the calculations vignette.

</div
 
 

関連する質問

0  Excelピボットテーブル - ピボットアイテムの抽出リストとセミコロンとの連結  ( Excel pivot table extract list of pivot items and concatenate with semi colon ) 
i画像に表されるようにピボットテーブルにデータを持っています。私の要求は、フィールドリスト(列A)のそれぞれについてアイテム値(列BとC)を抽出することです。これらの値を文字列に保存し、セミコロン(;)によってCOL Cに複数の値を分離します。 例:すべての...

5  これにはDyamicピボットクエリを使用してください。  ( Use dyamic pivot query for this ) 
私は以下の表を持っています。 (この表の主キーなし) <事前> <コード> ID | IC | Name | UGCOS | MCOS -----------------------------------...

-2  PLSQLでデータを再設定してください[閉じ]  ( Reshape data in plsql ) 
閉鎖。この質問には、詳細または明快さが必要です。現在答えを受け付けていません。 この質問を改善したいですか?詳細を追加し、問題を...

3  フィルタリングされたピボットテムのみでループを実行します  ( Perform a loop on filtered pivotitems only ) 
特定の基準に一致する PivotItems の PivotItems の someCriteria0 を合計したいです。 <コード> PageFilter の変更。これが私のコードです: <事前> <コード> Sub Worksheet_PivotTableU...

1  Pandas Pivot Tableをフィルタリングした後の合計  ( Totals after filtering pandas pivot table ) 
Pandasにピボットテーブルを作成し、その後、私はこれまでのところ大きくすると、フィルタされた表のGrand Totalにはフィルタされた値が含まれています。フィルタリングされた量を含めますか?ありがとう <事前> <コード> SBKCF = pd.piv...

1  Pivot Selectステートメントおよび動的列を含む別のテーブルにデータを挿入する方法  ( How to insert data into another table retrieved from pivot select statement and ) 
これは私のクエリです、 DECLARE @BranchAsColumn nvarchar(max) - ダイナミックカラムとしてCOMMA(、)を使用して分離されたBrabsNameを含めることができ、それはさまざまです。 #abc、#lmn、#xyz...

178  LINQを使用してデータをピボットすることは可能ですか?  ( Is it possible to pivot data using linq ) 
次のレイアウトからLINQをピボットすることが可能であるかどうか疑問に思います。 <事前> <コード> edge_t2 このようなものに: <事前> <コード> edge_t3 ...

1  Excel 2010:スライサーを切断せずにピボットテーブルのソースデータを変更する方法?  ( Excel 2010 how to change pivot table source data without disconnecting slicers ) 
これについて狂ったように研究しました、そして私は答えがない心配しています。しかし、このサイトの本当にスマートな人々が助けることができるかもしれません。 私は一緒に機能する2つのワークブックを持っています - Charts.xlsmとdata.xlsm。それら...

5  Python Pandasピボットテーブル  ( Python pandas pivot table ) 
Pandasを使って周波数数のピボット表をしようとしています。 次のコードがあります。 <事前> <コード> from pandas import pivot_table, DataFrame, crosstab import numpy as np ...

0  Profile TableのMySQL CrosStabクエリ  ( Mysql crosstab query for profile table ) 
次の表があります。 <事前> <コード> CREATE TABLE `profiles` ( `id` int(11) NOT NULL, `user` varchar(50) NOT NULL, `field` varchar(50) NOT N...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有