Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 寻找最佳医疗途径_R_Data Analysis - Fatal编程技术网

R 寻找最佳医疗途径

R 寻找最佳医疗途径,r,data-analysis,R,Data Analysis,从医院的数据中,我知道不同的医生和不同的患者群体为特定治疗所做的各种程序。现在我想分析这些不同的路径,并了解哪一条在成本方面是最好的。当我说最好时,并不意味着成本最低的最好。应该找出大多数医生所遵循的路径,并且从中成本最低。我的数据是: Doctor Procedure1 Procedure2 Procedure3 Procedure4 Procedure5 Charge 111 1 2 3 4 5

从医院的数据中,我知道不同的医生和不同的患者群体为特定治疗所做的各种程序。现在我想分析这些不同的路径,并了解哪一条在成本方面是最好的。当我说最好时,并不意味着成本最低的最好。应该找出大多数医生所遵循的路径,并且从中成本最低。我的数据是:

Doctor Procedure1 Procedure2 Procedure3 Procedure4 Procedure5 Charge
   111          1          2          3          4          5    200
   222          1          4          7          4          9    185
   333          2          3          5          1          9    250
   444          1          2          3          4          6    210
   222          1          2          3          4          6    210

我想知道所有这些路径中哪一条是最好的。

以下过程将获得唯一的过程组合,并将计算它们的流行程度(即行数)以及平均成本:

library(dplyr)

dt = read.table(text = "
Doctor    Procedure1   Procedure2   Procedure3   Procedure4   Procedure5   Charge
111         1               2            3            4           5           200
222         1               4            7            4           9           185
333         2               3            5            1           9           250
444         1               2            3            4           6           210
222         1               2            3            4           6           210
", header=T)

dt %>%
  group_by(Procedure1,Procedure2,Procedure3,Procedure4,Procedure5) %>%   # group by those 5 steps / procedures
  summarise(NumRows = n(),                                               # count how many rows they have
            AvgCharge = mean(Charge)) %>%                                # calculate average of charge
  ungroup() %>%                                                           
  arrange(desc(NumRows))                                                 # order by popularity

# # A tibble: 4 x 7
#   Procedure1 Procedure2 Procedure3 Procedure4 Procedure5 NumRows AvgCharge
#        <int>      <int>      <int>      <int>      <int>   <int>     <dbl>
# 1          1          2          3          4          6       2       210
# 2          1          2          3          4          5       1       200
# 3          1          4          7          4          9       1       185
# 4          2          3          5          1          9       1       250
库(dplyr)
dt=读取。表格(文本=”
医生程序收费
111         1               2            3            4           5           200
222         1               4            7            4           9           185
333         2               3            5            1           9           250
444         1               2            3            4           6           210
222         1               2            3            4           6           210
“,页眉=T)
dt%>%
分组依据(程序1、程序2、程序3、程序4、程序5)%>%#按这5个步骤/程序分组
总结(NumRows=n(),#计算它们有多少行
平均收费=平均(收费))%>%#计算平均收费
解组()%>%
按人气排序
##A tibble:4 x 7
#程序1程序2程序3程序4程序5 NumRows平均收费
#                                        
# 1          1          2          3          4          6       2       210
# 2          1          2          3          4          5       1       200
# 3          1          4          7          4          9       1       185
# 4          2          3          5          1          9       1       250
你应该考虑如何挑选最受欢迎的。是top X吗?是否代表Y%的行/医生?
然后,你应该考虑对你的平均值做一些统计比较,而不是只选择最低值。

对于每个路径<代码> DD/<代码>显示其<代码>计数< />代码(即具有该路径的行数)。code>dd按
Count
的降序和
Charge
的升序排序。最后,我们显示了每个
Count
Count
降序排序的最便宜路径

dd <- aggregate(list(Count = 1:nrow(DF)), DF[-1], length)
dd <- dd[order(-dd$Count, dd$Charge), ]
dd2 <- dd[ave(dd$Charge, dd$Count, FUN = function(x) x == x[1]) == 1, ]
也就是说,在使用两次的路径中,12346的成本最低,收费为210;在使用一次的路径中,14749的成本最低,收费为185。您现在可以评估计数和收费之间的权衡。(要查看所有路径的计数,请查看
dd
每个路径包含一行,其
Count
Count
Charge
排序)

您可以做的另一件事是删除占支配地位的行。也就是说,如果任何一行的计数和电荷都比当前行高,那么我们可以删除当前行。在本例中,没有占支配地位的行,但在可能存在的情况下,这将删除它们:

is_dom <- function(r, DF) with(DF, any(Count[-r] > Count[r] & Charge[-r] < Charge[r]))
dominated <- sapply(1:nrow(dd2), is_dom, dd2)
dd3 <- dd2[!dominated, ]
is_dom Count[r]&Charge[-r]在提问时,您需要更加具体。非常感谢,这就是我要找的…添加了一些可选代码以删除占支配地位的行(
dd3
)。不会改变示例,但对于您的真实数据,它可能会被使用。感谢您的更改。。。我是通过另一个代码实现的,但是你的代码很简单,也很简单。。这与前面的评论相结合,解决了我的想法。
is_dom <- function(r, DF) with(DF, any(Count[-r] > Count[r] & Charge[-r] < Charge[r]))
dominated <- sapply(1:nrow(dd2), is_dom, dd2)
dd3 <- dd2[!dominated, ]
DF <-
structure(list(Doctor = c(111L, 222L, 333L, 444L, 222L), Procedure1 = c(1L, 
1L, 2L, 1L, 1L), Procedure2 = c(2L, 4L, 3L, 2L, 2L), Procedure3 = c(3L, 
7L, 5L, 3L, 3L), Procedure4 = c(4L, 4L, 1L, 4L, 4L), Procedure5 = c(5L, 
9L, 9L, 6L, 6L), Charge = c(200L, 185L, 250L, 210L, 210L)), .Names = c("Doctor", 
"Procedure1", "Procedure2", "Procedure3", "Procedure4", "Procedure5", 
"Charge"), class = "data.frame", row.names = c(NA, -5L))