【问题标题】:Creating variables in nested for loop in R在R的嵌套for循环中创建变量
【发布时间】:2015-03-12 12:50:56
【问题描述】:

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

变量为:CASE_IDDATEOPER_IN_TIMEOPER_OUT_TIMEOPER_ROOM

OPER_IN_TIMEOPER_OUT_TIME 存储为 POSIXct
DATEdate 变量(格式 = %Y-%m-%d)。
OPER_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

【问题讨论】:

  • 您能dput()您的数据(或仅head())以便我们更好地帮助您吗?

标签: r loops


【解决方案1】:

这是使用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)]

只需用真正的可排序时间戳替换进出时间...

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 2021-12-08
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2018-12-25
    相关资源
    最近更新 更多