2015-05-21 22 views
6

Chcę porównać koszty kodów CPT z dwóch różnych płatników roszczeń. Obaj mają dostawców cenowych i nieproporcjonalnych. Używam dplyr i modeest::mlv, ale nie działa zgodnie z oczekiwaniami. Oto kilka przykładowych danych;Jak uzyskać tryb grupy w podsumowaniu w 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 

a kod

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)      

Myślałem, że mogę załadować modeest w funkcji podsumować ze średniej i mediany, ale ta postać błędy Out With błąd w as.character (x): nie może przymusić typu "zamknięcie" do wektora typu "znak" Bez mlv Otrzymuję df w ten sposób, ale chcę uzyskać wszystkie statystyki dla płatnika cpt w jednym wierszu. Wyobrażam sobie wyświetlanie wykresów w boxplots poprzez ograniczenie X i Y segmenty, gdy dostaję to, czego potrzebuję na wiersz

niewystarczająca odpowiedź jest to (nie pamiętam, aby uzyskać nazwę płatnika tu!)

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. 

Odpowiedz

5

Musisz wprowadzić kilka zmian w kodzie, aby uruchomić mlv.

  1. Metoda (mfv) musi znajdować się w cudzysłowie ("mfv"). To właśnie powoduje twój błąd.
  2. Po wykonaniu tej czynności, ponieważ mlv zwraca listę, musisz podać jedną wartość do podsumowania(). Zakładając, że chcesz tryb ("M"), wybierz ten element z listy.

Spróbuj:

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

dostać:

> 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, który pomaga poruszać się do przodu.