【发布时间】:2013-11-21 18:45:32
【问题描述】:
我试图弄清楚如何在我的数据集中添加一个列,其中包括基于每个患者日期的唯一事件计数。这是我的数据集的一部分:
trialno event date time
3 11301 pm_intake 2010-11-24 19:00
4 11301 am_intake 2010-11-25 07:00
5 11301 pk1 2010-11-25 10:30
6 11301 pm_intake 2010-12-22 19:00
7 11301 am_intake 2010-12-23 07:00
8 11301 pk1 2010-12-23 09:54
9 11301 pk2 2010-12-23 13:07
10 11301 pm_intake 2011-02-02 19:00
11 11301 am_intake 2011-02-03 07:00
12 11301 pk1 2011-02-03 11:30
基本上每个患者的每个日期都表示一个新的场合。如果患者仅给药 - 这是一次,但如果患者在同一天给药并进行两次测量,则它们都算作同一场合。该数据集没有规律的模式(每个患者在每个日期和事件总数中都有不同数量的事件)。 我想要实现的是:
trialno event date time OCC
3 11301 pm_intake 2010-11-24 19:00 1
4 11301 am_intake 2010-11-25 07:00 2
5 11301 pk1 2010-11-25 10:30 2
6 11301 pm_intake 2010-12-22 19:00 3
7 11301 am_intake 2010-12-23 07:00 4
8 11301 pk1 2010-12-23 09:54 4
9 11301 pk2 2010-12-23 13:07 4
10 11301 pm_intake 2011-02-02 19:00 5
11 11301 am_intake 2011-02-03 07:00 6
12 11301 pk1 2011-02-03 11:30 6
我认为我应该应用某种循环来识别每个患者的唯一日期并计算它们,但我不确定如何编写它,所以我尝试使用 apply 函数。
我考虑过首先使用拆分函数将整个数据集拆分为单个患者:
splitData<- split(data, data$trialno)
并应用 lapply 和 transform 来添加一个新列 OCC(场合),但我不知道如何将它们计为整数...
我在想:
splitData<- lapply(splitData, function(df) {
transform(df, OCC= ??????????????? )}
do.call ("rbind", splitData)
我知道如何在 Excell 中做到这一点:
=IF(D5=D4, E4,E4+1)
(如果相邻单元格中的单元格值与上面的单元格中的相同,那么我的单元格中的值与上面的相同,否则它会更大)- 这样 E 列中的第一个单元格必须为 1 并且其他是新日期事件的整数。
我尝试寻找有关堆栈溢出的类似问题,但没有任何运气。
非常感谢您的帮助!
【问题讨论】:
-
也许这样的帮助:
lapply(splitData, function(df) {df$OCC <- as.numeric(factor(df$date)); return(df)})?
标签: r