How to get group mode in summation in R

I want to compare the cost of CPT codes from two different claim payers. Both have paired and non-rated service providers. I use dplyr and modeest::mlv , but it does not work as expected. Here are some sample data;

 source CPTCode ParNonPar Key net_paid PaidFreq seq ABC 100 Y ABC100Y -341.00 6 1 ABC 100 Y ABC100Y 0.00 2 2 ABC 100 Y ABC100Y 341.00 6 3 XYZ 103 Y XYZ103Y 740.28 1 1 XYZ 104 N XYZ104N 0.00 2 1 XYZ 104 N XYZ104N 401.82 1 2 XYZ 104 N XYZ104N 726.18 1 3 XYZ 104 N XYZ104N 893.00 1 4 XYZ 104 N XYZ104N 928.20 2 5 XYZ 104 N XYZ104N 940.00 2 6 

and code

 str(data) View(data) ## Expand frequency count to individual observations n.times <- data$PaidAmounts dataObs <- data[rep(seq_len(nrow(data)), n.times),] ## Calculate mean for each CPTCode (for mode use modeest library) library(dplyr) library(modeest) dataSummary <- dataObs %>% group_by(ParNonPar, CPTCode) %>% summarise(mean = mean(net_paid), median=median(net_paid), mode = mlv(net_paid, method=mfv), total = sum(net_paid)) str(dataSummary) 

I thought I could load the mode in the sum function with middle and middle, but this wording fixes an Error in as.character (x): cannot force type 'closure' to vector of type 'character' Without mlv, I get df like this, but I want to get all the statistics for the cpt payer on one line. I imagine a graphical display in the boxes, restricting the x and y segments as soon as I get what I need in the line

An inadequate answer is this (I forgot to get the payer name here!)

 ParNonPar CPTCode mean median(net_paid) total N 0513F 0.000000 0.000 0.00 N 0518F 0.000000 0.000 0.00 N 10022 0.000000 0.000 0.00 N 10060 73.660000 90.120 294.64 N 10061 324.575000 340.500 1298.30 N 10081 312.000000 312.000 312.00 thanks very much for your time and effort. 
+8
source share
2 answers

You need to make a couple of changes in your code for mlv to work.

  • method (mfv) must be in quotation marks ('mfv'). This is what causes your error.
  • After that, since mlv returns the list, you must supply a single value for sumize (). Assuming you want a mode ('M'), you select this item from the list.

Try:

 dataSummary <- dataObs %>% group_by(ParNonPar, CPTCode) %>% summarise(mean = mean(net_paid), meadian=median(net_paid), mode = mlv(net_paid, method='mfv')[['M']], total = sum(net_paid)) 

To obtain:

 > dataSummary Source: local data frame [3 x 6] Groups: ParNonPar ParNonPar CPTCode mean meadian mode total 1 N 104 639.7111 893.00 622.7333 5757.40 2 Y 100 0.0000 0.00 0.0000 0.00 3 Y 103 740.2800 740.28 740.2800 740.28 

Hope this helps you move forward.

+7
source

I use this approach:

 df <- data.frame(groups = c("A", "A", "A", "B", "B", "C", "C", "C", "D"), nums = c("1", "2", "1", "2", "3", "4", "5", "5", "1")) 

which looks like:

  groups nums A 1 A 2 A 1 B 2 B 3 C 4 C 5 C 5 D 1 

Then I define:

 mode <- function(codes){ which.max(tabulate(codes)) } 

and do the following:

 mds <- df %>% group_by(groups) %>% summarise(mode = mode(nums)) 

Giving:

  groups mode A 1 B 2 C 5 D 1 
0
source

Source: https://habr.com/ru/post/987702/


All Articles