R aa使用data.table查找区间交点的长度
我有这样的数据:R aa使用data.table查找区间交点的长度,r,date,data.table,posixct,R,Date,Data.table,Posixct,我有这样的数据: View(dose_merged) SUBJECT_Blinded PACKID SACDPDAT SACRTDAT treatment_interval SD_SDAT SD_EDAT 1 1501301 10094 2012-05-26 2012-07-23 58 2012-01-03 2013-01-02 2 1601301 10555 2012-01
View(dose_merged)
SUBJECT_Blinded PACKID SACDPDAT SACRTDAT treatment_interval SD_SDAT SD_EDAT
1 1501301 10094 2012-05-26 2012-07-23 58 2012-01-03 2013-01-02
2 1601301 10555 2012-01-03 2012-01-31 28 2012-01-03 2013-01-0
对于数据表中的列类型:
> mapply(class, dose_merged)
$SUBJECT_Blinded
[1] "numeric"
$PACKID
[1] "numeric"
$SACDPDAT
[1] "POSIXct" "POSIXt"
$SACRTDAT
[1] "POSIXct" "POSIXt"
$treatment_interval
[1] "Interval"
attr(,"package")
[1] "lubridate"
$SD_SDAT
[1] "POSIXct" "POSIXt"
$SD_EDAT
[1] "POSIXct" "POSIXt"
我想确定区间相交的长度:intervalSACDPDAT、SACRTDAT和intervalSD_SDAT、SD_EDAT。
我正在尝试:
dose_merged[,intersect1 := aaply(dose_merged, 1, function(x){intersect(interval(x[3],x[4]), interval(x[8],x[9]))})]
但随后我收到错误消息:
Error: error while computing 'x' when choosing method for 'intersect': Error in as.POSIXct.default(start) :
do not know how to convert 'start' to class “POSIXct”
线路
intersect(interval(x[3],x[4]), interval(x[8],x[9]))})
适用于指定的第x行。
你知道我做错了什么吗
DPUTU的前两行合并:
structure(list(SUBJECT_Blinded = c(1101001, 1101001), PACKID = c(10096,
10595), SACDPDAT = structure(c(1335304800, 1325545200), class = c("POSIXct",
"POSIXt"), tzone = ""), SACRTDAT = structure(c(1340316000, 1327964400
), class = c("POSIXct", "POSIXt"), tzone = ""), treatment_interval = structure(c(58,
28), class = structure("Interval", package = "lubridate")), TS_SDAT = structure(c(NA_real_,
NA_real_), class = c("POSIXct", "POSIXt"), tzone = ""), TS_EDAT = structure(c(NA_real_,
NA_real_), class = c("POSIXct", "POSIXt"), tzone = ""), SD_SDAT = structure(c(1325545200,
1325545200), class = c("POSIXct", "POSIXt"), tzone = ""), SD_EDAT = structure(c(1357081200,
1357081200), class = c("POSIXct", "POSIXt"), tzone = "")), .Names = c("SUBJECT_Blinded",
"PACKID", "SACDPDAT", "SACRTDAT", "treatment_interval", "TS_SDAT",
"TS_EDAT", "SD_SDAT", "SD_EDAT"), sorted = "SUBJECT_Blinded", class = c("data.table",
"data.frame"), row.names = c(NA, -2L), .internal.selfref = <pointer: 0x0000000002f30788>)
您能否提供一个可复制的数据示例—dputdose_合并输出。否则,我们必须解决如何创建intervalIt类列的问题。我很难发布原始数据,因为这是真实的数据,我不应该将其公开。不过,我可以举出一些例子。正如我所说,我当然可以举出一些类似的例子。但是,我不知道这是否有帮助,因为$treatment\u interval列在我介绍的代码中没有任何作用。总而言之,我可以向您提供这些数据,告诉我它是否真的有帮助:当然,您可以提供前两行dputted数据。您给我们的数据是alreadyOK,我已经添加了前两行dputted数据。