2015-05-21 8 views
6

Ich möchte Kosten von CPT-Codes von zwei verschiedenen Schadenregulierer vergleichen. Beide haben Par- und Non-Par-Anbieter. Ich verwende dplyr und modeest::mlv, aber es funktioniert nicht wie erwartet. Hier einige Beispieldaten;Wie man den Modus einer Gruppe zusammenfasst in R

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 

und der 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)      

Ich dachte, ich modeest in der summarise Funktion mit dem Mittelwert und Median, aber diese Formulierung Fehler heraus mit Fehler in as.character laden konnte (x): kann nicht zwingen Typ 'Schließung' zu Vektor des Typs 'Charakter' Ohne mlv bekomme ich eine df wie diese, aber was ich will ist, um alle Statistiken für einen Zahler cpt auf einer Zeile. Ich stelle mir vor der grafischen Darstellung in Boxplots durch die x- und y-Segmente zu begrenzen, sobald ich bekommen, was ich auf einer Reihe benötigen

die unzureichende Antwort ist (ich habe vergessen, hier der Zahler Namen zu erhalten!)

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. 

Antwort

5

Sie müssen einige Änderungen an Ihrem Code vornehmen, damit mlv funktioniert.

  1. Die Methode (mfv) muss in Anführungszeichen stehen ('mfv'). Das verursacht Ihren Fehler.
  2. Nachdem Sie dies getan haben, müssen Sie, da mlv eine Liste zurückgibt, einen Wert für summaris() eingeben. Angenommen, Sie möchten den Modus ('M'), wählen Sie dieses Element aus der Liste aus.

Versuchen:

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)) 

zu erhalten:

> 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 

Hoffnung, die Sie vorwärts bewegen können.