在Excel或R中对医院准入数据进行分类

时间:2016-04-06 01:24:37

标签: r excel categorization

我的患者数据如下:

ID    DATE          DUR    
82    29/08/2014    10.32
82    29/08/2014    0.32
82    12/09/2014    13.35
82    12/09/2014    0.16
82    12/09/2014    0.24
82    12/09/2014    0.31
82    22/12/2014    100.39
82    22/12/2014    0.1
219   31/11/2012    -300.32
219   31/11/2012    0.23
219   12/01/2013    80.20
219   12/01/2013    0.20

在第一列中是患者ID,在第二列中有一个日期和时间(时间在视觉上缺失但在那里),第三列只是持续时间差异(我一直用来确定不同的入场时间)耐心)。每个不同的行都是对患者的检查,但他们可能是在以后来到这里(不是在同一时间范围内)。

基本上我想要做的是能够对每个患者的数字进行分类,这样当他们第二次承认时,身份就变成了#82; 82a"第三次" 82b"等等。它不必是字母,它可以是任何这样的指标。有时可能会有多达50种不同入院的患者(单独入院)。所以在此之后我想让它看起来像:

ID    DATE          DUR
82    29/08/2014    10.32    
82    29/08/2014    0.32
82a   12/09/2014    13.35
82a   12/09/2014    0.16
82a   12/09/2014    0.24
82a   12/09/2014    0.31
82b   22/12/2014    100.39
82b   22/12/2014    0.1
219   31/11/2012    -300.32
219   31/11/2012    0.23
219a  12/01/2013    80.20
219a  12/01/2013    0.20

我一直在Excel工作,最初使用过

=IF(AND(ABS(C3)>1,A3=A2),1,0)

只是为了表明在新的入场日期重复ID的时间,然后我再次这样做以表示第3次入场并开始抽出第4,5,6列的列并计划合并它们。这根本不是一种有效的解决方案,尤其是对于大型数据集。我熟悉R并认为这可能是一种更好的操作方式,但我只是坚持如何为整个数据集执行此操作并不断添加新的"指示符"每次同一患者再次入院。我甚至不确定如何告诉计算机如何处理伪。也许是这样的事情

Pseudo-Code
-> Run through ID Column
-> IF Dur is > 1 (it will always be > 1 for a new admission) 
ANDIF ID already exists above with DUR > 1 = a,  or if DUR > 1 TWICE  for
same ID = b, or if DUR > THREE TIMES = c, and so on....

任何帮助都会很棒

1 个答案:

答案 0 :(得分:0)

在R中,你有很多选择。但是,您的数据存在问题;由于11月只有30天,将KEY_UP列转换为实际日期格式会引入DATE s。 (当然,您可以将其保留为字符,但日期格式更容易使用。)

使用NA

dplyr

Base R有很多选项,包括library(dplyr) df %>% mutate(DATE = as.Date(DATE, '%d/%m/%Y')) %>% # parse date data group_by(ID) %>% # group data by ID mutate(visit = as.integer(factor(DATE))) # make an integer factor of DATE # Source: local data frame [12 x 4] # Groups: ID [2] # # ID DATE DUR visit # (int) (date) (dbl) (int) # 1 82 2014-08-29 10.32 1 # 2 82 2014-08-29 0.32 1 # 3 82 2014-09-12 13.35 2 # 4 82 2014-09-12 0.16 2 # 5 82 2014-09-12 0.24 2 # 6 82 2014-09-12 0.31 2 # 7 82 2014-12-22 100.39 3 # 8 82 2014-12-22 0.10 3 # 9 219 <NA> -300.32 NA # 10 219 <NA> 0.23 NA # 11 219 2013-01-12 80.20 1 # 12 219 2013-01-12 0.20 1 ave,但为了简单起见,您可以在split-apply-combine模型中逐步了解会发生什么,{ {1}}通过在列表中对变量tapply进行分组,并使用split重新组合:

lapply