2015-05-21 15 views
6

Tôi muốn so sánh chi phí của mã CPT từ hai đối tượng nộp đơn khiếu nại khác nhau. Cả hai đều có nhà cung cấp có giá ngang và không ngang giá. Tôi đang sử dụng dplyrmodeest::mlv nhưng không hoạt động như dự kiến. Heres một số dữ liệu mẫu;Cách lấy chế độ của một nhóm được tóm tắt trong 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 

và mã

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)      

Tôi nghĩ tôi có thể tải modeest trong hàm Tóm tắt với giá trị trung bình và trung bình, nhưng công thức này lỗi với Lỗi trong as.character (x): không thể ép buộc loại 'đóng cửa' để vector của loại 'nhân vật' Nếu không có mlv tôi nhận được một df như thế này, nhưng những gì tôi muốn là để có được tất cả các số liệu thống kê cho một người thanh toán cpt trên một dòng. Tôi hình dung vẽ đồ thị nó trong boxplots bằng cách giới hạn x và y phân đoạn, một khi tôi có được những gì tôi cần trên một hàng

câu trả lời đầy đủ là thế này (tôi quên để có được tên người thanh toán tại đây!)

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. 

Trả lời

5

Bạn cần thực hiện một vài thay đổi đối với mã của bạn để MLV hoạt động.

  1. phương thức (mfv) phải nằm trong dấu ngoặc kép ('mfv'). Đó là những gì gây ra lỗi của bạn.
  2. Sau khi bạn làm điều đó, vì mlv trả về một danh sách, bạn phải nạp một giá trị để tóm tắt(). Giả sử bạn muốn chế độ ('M'), bạn chọn phần tử đó từ danh sách.

Hãy thử:

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

để có được:

> 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 

Hy vọng rằng sẽ giúp bạn di chuyển về phía trước.

Các vấn đề liên quan