【问题标题】:How to add a unique occasion for different observation dates within an individual in R?如何在 R 中为个人的不同观察日期添加独特的场合?
【发布时间】: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 &lt;- as.numeric(factor(df$date)); return(df)})?

标签: r


【解决方案1】:

如果我理解正确,您希望 OCC 为每个试用号指示唯一日期,但您希望为每个新试用号在 1 处重新启动 OCC。这可以使用data.table 包最轻松地完成。

首先,我将生成一些包含多个试验编号的数据:

> dt0
   trialno     event       date  time
1    11301 pm_intake 2010-11-24 19:00
2    11301 am_intake 2010-11-25 07:00
3    11301       pk1 2010-11-25 10:30
4    11301 pm_intake 2010-12-22 19:00
5    11301 am_intake 2010-12-23 07:00
6    11301       pk1 2010-12-23 09:54
7    11301       pk2 2010-12-23 13:07
8    11301 pm_intake 2011-02-02 19:00
9    11301 am_intake 2011-02-03 07:00
10   11301       pk1 2011-02-03 11:30
11   11302       pk1 2011-02-03 11:30
12   11302       pk1 2011-02-03 11:40

OCC 列可以这样添加:

> require(data.table)
> dt<-data.table(dt0)
> dt[,OCC:=match(date,unique(date)),by=trialno]
> dt
    trialno     event       date  time OCC
 1:   11301 pm_intake 2010-11-24 19:00   1
 2:   11301 am_intake 2010-11-25 07:00   2
 3:   11301       pk1 2010-11-25 10:30   2
 4:   11301 pm_intake 2010-12-22 19:00   3
 5:   11301 am_intake 2010-12-23 07:00   4
 6:   11301       pk1 2010-12-23 09:54   4
 7:   11301       pk2 2010-12-23 13:07   4
 8:   11301 pm_intake 2011-02-02 19:00   5
 9:   11301 am_intake 2011-02-03 07:00   6
10:   11301       pk1 2011-02-03 11:30   6
11:   11302       pk1 2011-02-03 11:30   1
12:   11302       pk1 2011-02-03 11:40   1

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多