在R中嵌套for循环中创建变量

时间:2015-03-12 12:50:57

标签: r loops

数据集的大小写为行。每个案例都有一天进行,还有一个手术室。它还有一个开始和结束时间。如果特定手术室中的病例在一天之内,我需要创建一个新变量来存储订单信息。 (即这是当天的第一个案例,也是最后一个案例)。我需要将此信息保存在数据集中的新变量中。

变量包括:CASE_IDDATEOPER_IN_TIMEOPER_OUT_TIMEOPER_ROOM

OPER_IN_TIMEOPER_OUT_TIME存储为POSIXct DATEdate变量(格式= %Y-%m-%dOPER_ROOMinteger

我已经发现我可以使用dplyr命令在一个手术室中一天内获得病例的顺序:

dataset %>% 
    filter(DATE == "2014-01-02", OPER_ROOM == "20") %>% 
    arrange(OPER_IN_TIME) %>% 
    mutate(ORDER = row_number())

如何构建嵌套循环以存储每个案例的此信息?我还需要了解当天的最后一个案例,并将信息存储在案例中。

编辑:dput()

structure(list(ID = 1:7, OPER_ROOM = c(13L, 12L, 13L, 12L, 13L, 
12L, 13L), OPER_IN_TIME = structure(c(1388644200, 1388643300, 
1388653200, 1388649600, 1388662200, 1388730600, 1388729400), class = c("POSIXct", 
"POSIXt"), tzone = ""), OPER_OUT_TIME = structure(c(1388650800, 
1388647200, 1388658600, 1388658300, 1388665800, 1388737800, 1388745000
), class = c("POSIXct", "POSIXt"), tzone = ""), DATE = structure(c(16072, 
16072, 16072, 16072, 16072, 16073, 16073), class = "Date")), .Names = c("ID", 
"OPER_ROOM", "OPER_IN_TIME", "OPER_OUT_TIME", "DATE"), row.names = c(NA, 
-7L), class = "data.frame")

头()

  ID OPER_ROOM        OPER_IN_TIME       OPER_OUT_TIME       DATE
1  1        13 2014-01-02 08:30:00 2014-01-02 10:20:00 2014-01-02
2  2        12 2014-01-02 08:15:00 2014-01-02 09:20:00 2014-01-02
3  3        13 2014-01-02 11:00:00 2014-01-02 12:30:00 2014-01-02
4  4        12 2014-01-02 10:00:00 2014-01-02 12:25:00 2014-01-02
5  5        13 2014-01-02 13:30:00 2014-01-02 14:30:00 2014-01-02
6  6        12 2014-01-03 08:30:00 2014-01-03 10:30:00 2014-01-03

1 个答案:

答案 0 :(得分:0)

以下是使用data.table包的解决方案:

library(data.table)
dt <- data.table(CASE_ID=1:10,
                 DATE=rep(as.Date("2015-01-01")+0:1, 5),
                 OPER_IN_TIME=1:10,
                 OPER_OUT_TIME=11:20,
                 OPER_ROOM=rep(c(1,2),5))

dt[, ORDER := order(-OPER_OUT_TIME), by=list(DATE, OPER_ROOM) ]
dt[, LAST :=  ifelse(ORDER==max(ORDER), T, F), by=list(DATE, OPER_ROOM)]

只需更换In&amp;超出实际可排序时间戳的时间......