生存::tmerge()给定为.Date.numeric(value)错误

生存::tmerge()给定为.Date.numeric(value)错误,r,survival,R,Survival,我正试图收集一些数据来做一些生存分析,但我一直得到一个错误 library(survival) library(lubridate) df1 <- data.frame(id = "62103", hire.date = ymd("2016-05-16"), end.date = ymd(Sys.Date()) ) job <- data.frame(id = c("62103", "62103"),

我正试图收集一些数据来做一些生存分析,但我一直得到一个错误

library(survival)
library(lubridate)

df1 <- data.frame(id = "62103",
                  hire.date = ymd("2016-05-16"),
                  end.date = ymd(Sys.Date())
)
job <- data.frame(id = c("62103", "62103"),
                  job1 = c("level 1 coder", "level 2 coder"),
                  start.date = c(ymd("2016-05-16"), ymd("2017-05-16")),
                  end.date = c(ymd("2017-05-16"), NA)
)

df2 <- tmerge(df1, df1, id = id,
              tstart = hire.date,
              tstop = end.date)
df3 <- tmerge(df2, job, id = id,
              job = tdc(start.date, job1)
)

tdc
功能是
tmerge
功能的内部。下面是代码顶部的定义:

 assign("tdc", function(time, value = NULL) {
        x <- list(time = time, value = value)
        class(x) <- "tdc"
        x
    }, envir = new)

我还怀疑,除了使用列名作为
tdc
的参数外,成功运行
tmerge
还需要一个更大的示例。
df2
示例只有一行数据,因此不清楚它是如何随时间变化的。我还注意到示例中似乎没有状态变量,而这是Therneau示例中的第一个操作:
pbc2tdc
函数是
tmerge
函数的内部。下面是代码顶部的定义:

 assign("tdc", function(time, value = NULL) {
        x <- list(time = time, value = value)
        class(x) <- "tdc"
        x
    }, envir = new)

我还怀疑,除了使用列名作为
tdc
的参数外,成功运行
tmerge
还需要一个更大的示例。
df2
示例只有一行数据,因此不清楚它是如何随时间变化的。我还注意到,示例中似乎没有状态变量,而这是Therneau示例中的第一个操作:
pbc2似乎
tdc
的问题在于某些日期数学没有正确执行。将(前后?)转换为数字可以解决这个问题

library(survival)
library(lubridate)
library(tidyverse)
df1 <- data.frame(id = "62103",
                  hire.date = ymd("2016-05-16"),
                  end.date = ymd(Sys.Date())
) %>% 
  mutate_if(is.Date, as.numeric)
job <- data.frame(id = c("62103", "62103"),
                  job1 = c("level 1 stacker", "level 2 stacker"),
                  start.date = c(ymd("2016-05-16"), ymd("2017-05-16")),
                  end.date = c(ymd("2017-05-16"), NA)
)%>% 
  mutate_if(is.Date, as.numeric)

df2 <- tmerge(df1, df1, id = id,
              tstart = hire.date,
              tstop = end.date)
df3 <- tmerge(df2, job, id = id,
              job = event(start.date, job1)
) %>%
  mutate_if(is.numeric, as.Date, origin = "1970-01-01")
库(生存)
图书馆(lubridate)
图书馆(tidyverse)
df1%
如果(is.Date,as.numeric)发生变化
职位%
如果(is.Date,as.numeric)发生变化

df2tdc的问题似乎是某些日期数学没有正确执行。将(前后?)转换为数字可以解决这个问题

library(survival)
library(lubridate)
library(tidyverse)
df1 <- data.frame(id = "62103",
                  hire.date = ymd("2016-05-16"),
                  end.date = ymd(Sys.Date())
) %>% 
  mutate_if(is.Date, as.numeric)
job <- data.frame(id = c("62103", "62103"),
                  job1 = c("level 1 stacker", "level 2 stacker"),
                  start.date = c(ymd("2016-05-16"), ymd("2017-05-16")),
                  end.date = c(ymd("2017-05-16"), NA)
)%>% 
  mutate_if(is.Date, as.numeric)

df2 <- tmerge(df1, df1, id = id,
              tstart = hire.date,
              tstop = end.date)
df3 <- tmerge(df2, job, id = id,
              job = event(start.date, job1)
) %>%
  mutate_if(is.numeric, as.Date, origin = "1970-01-01")
库(生存)
图书馆(lubridate)
图书馆(tidyverse)
df1%
如果(is.Date,as.numeric)发生变化
职位%
如果(is.Date,as.numeric)发生变化

df2从您使用的包
tdc
survival::tdc
我得到
survival::tdc错误:“tdc”不是从“namespace:survival”导出的对象
我有ssame版本
survival\u 2.44-1.1
让我们澄清一下!对于tdc(start.date,job)
你是说依赖时间的协变量是日期型的吗?我希望它是一个数字类型…嘿@VitaliAvagyan:依赖时间的协变量应该是字符串类型--在终止之前你做了什么工作?你使用了哪个包
tdc
survival::tdc
我得到
survival::tdc错误:“tdc”不是从“namespace:survival”导出的对象。
我有ssame版本
survival_2.44-1.1
让我们澄清一下!对于tdc(start.date,job)
你是说依赖时间的协变量是日期型的吗?我希望它是一个数字类型…嘿@VitaliAvagyan:依赖时间的协变量应该是字符串类型——你在终止之前做过什么工作?这很有帮助!尽管如此,我认为
start.date
是随时间变化的(它会变化一年),而
job1
也会变化。(我正在更改示例中的名称,谢谢)。此外,小插曲中的例子显然只适用于一个人和两个时间相关协变量的观察。下面这个对我来说很好<代码>温度这很有帮助!尽管如此,我认为
start.date
是随时间变化的(它会变化一年),而
job1
也会变化。(我正在更改示例中的名称,谢谢)。此外,小插曲中的例子显然只适用于一个人和两个时间相关协变量的观察。下面这个对我来说很好<代码>温度