使用data.table时R崩溃

时间:2014-04-04 08:22:36

标签: r data.table

sac [,treatment_days:= as.character(seq(from = SACDPDAT,to = SACRTDAT,by =" 1 day")),by = PACKID]我有一个名为sac with dput的数据(sac [1:2,])如下:

structure(list(SUBJECT_Blinded = c(1201001, 1101001), LINE = c(8, 
4), MODULE = c("SAC", "SAC"), CENTRE_Blinded = c(1201, 1201), 
STUDYPER = c(7, 4), PACKID = c(10096, 10595), SACDPDAT = structure(c(1335304800, 
1325545200), class = c("POSIXct", "POSIXt"), tzone = ""), 
SACDP1 = c(35, 35), C_SACDP = c(NA_character_, NA_character_
), SACRTDAT = structure(c(1340316000, 1327964400), class = c("POSIXct", 
"POSIXt"), tzone = ""), SACRT1 = c(0, 9), C_SACRT = c(NA_character_, 
NA_character_)), .Names = c("SUBJECT_Blinded", "LINE", "MODULE", 
"CENTRE_Blinded", "STUDYPER", "PACKID", "SACDPDAT", "SACDP1", 
"C_SACDP", "SACRTDAT", "SACRT1", "C_SACRT"), sorted = c("SUBJECT_Blinded", 
"PACKID"), class = c("data.table", "data.frame"), row.names = c(NA, 
-2L))

当我运行代码时:

sac[,treatment_days := list(format(seq(from = SACDPDAT, to = SACRTDAT, by = "1 day"),"%Y-%m-%d")), by = PACKID]

RStudio粉碎并返回信息:

Problem signature:
Problem Event Name: APPCRASH
Application Name:   rsession.exe
Application Version:    0.98.501.0
Application Timestamp:  52e8371d
Fault Module Name:  R.dll
Fault Module Version:   3.3.65126.0
Fault Module Timestamp: 53185fd3
Exception Code: c0000005
Exception Offset:   0000000000028c36
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1045
Additional Information 1:   4fc0
Additional Information 2:   4fc0e6e5b53a870c89fb6e37a38d7e6b
Additional Information 3:   9d6e
Additional Information 4:   9d6e8f79167930945e5a5d06afac680e

与纯粹的R相同。任何想法如何以另一种方式做到这一点?

1 个答案:

答案 0 :(得分:2)

您的新代码存在一些问题:

  1. "1 day"不正确,如果您在日期对象上运行seq,则传递给by的号码将被解释为天数,因此:

    seq(from = SACDPDAT, to = SACRTDAT, by = 1)
    
  2. 您也无法从此序列创建新列,因为每行只能有一个值。相反,您可以按PACKID生成天数序列,然后将join生成到旧data.table

  3. 所以试试:

    setkey(sac, PACKID)
    sac <- sac[sac[,seq(from = SACDPDAT, to = SACRTDAT, by = 1), by=PACKID]]