如何在R中总结一组的模式

dre*_*rew 8 statistics r mode dplyr

我想比较来自两个不同索赔付款人的CPT代码的费用.两者都有标准和非标准价格的供应商.我使用dplyrmodeest::mlv,但它不工作了如预期.下面是一些样本数据;

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
Run Code Online (Sandbox Code Playgroud)

和代码

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)                     
Run Code Online (Sandbox Code Playgroud)

我认为我可以使用均值和中位数在总结函数中加载modeest,但是这个公式错误输出as.character(x):不能强制类型'closure'强制类型为'character'的向量'没有mlv我得到一个如果这样,但我想要的是在一条线上获得付款人cpt的所有统计数据.我设想通过限制x和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.
Run Code Online (Sandbox Code Playgroud)

Ram*_*han 7

您需要对代码进行一些更改才能使mlv正常工作.

  1. 方法(mfv)必须在引号('mfv')内.这就是导致错误的原因.
  2. 执行此操作后,由于mlv返回一个列表,您必须将一个值提供给summarize().假设您需要模式('M'),则从列表中选择该元素.

尝试:

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))
Run Code Online (Sandbox Code Playgroud)

要得到:

> 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
Run Code Online (Sandbox Code Playgroud)

希望能帮助你前进.


orr*_*ymr 6

我使用这种方法:

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"))
Run Code Online (Sandbox Code Playgroud)

看起来像:

 groups nums
  A    1
  A    2
  A    1
  B    2
  B    3
  C    4
  C    5
  C    5
  D    1
Run Code Online (Sandbox Code Playgroud)

然后我定义:

mode <- function(codes){
  which.max(tabulate(codes))
}
Run Code Online (Sandbox Code Playgroud)

并执行以下操作:

mds <- df %>%
  group_by(groups) %>%
  summarise(mode = mode(nums))
Run Code Online (Sandbox Code Playgroud)

给予:

  groups  mode
 A          1
 B          2
 C          5
 D          1
Run Code Online (Sandbox Code Playgroud)

  • 如果您有因子并希望模式使用因子标签,则可以将此方法调整为:`mode &lt;- function(x) { name(which.max(table(x))) }` (2认同)