【问题标题】:R conditional variable for longitudinal data纵向数据的 R 条件变量
【发布时间】:2014-08-16 05:05:31
【问题描述】:

我有一年中每个月的受保人数据。所有变量都是虚拟变量,我需要创建一个新变量来显示一个人何时失去保险。我正在调用变量持续时间。我的数据集 (df) 如下所示:

ID 1 月 2 月 3 月 4 月 5 月 6 月 7 月 8 月 9 月 10 月 11 月 12 月

101 1 1 1 1 0 0 1 1 1 1 1 1

102 1 1 1 1 0 0 0 0 0 0 0 0

103 1 1 1 1 1 1 1 1 1 1 1 1

104 1 1 1 1 0 1 1 0 1 1 1 1

在数据集中,1 已投保,0 未投保​​。当人从 1 变为 0 时,我的新变量将具有 col 位置。例如,在第一行中,我的变量持续时间将具有值 5五月。我只对 0 的第一个实例感兴趣。例如,在第 4 行中,我只需要 5 即可,可以忽略八月。此外,如果该人没有像 103 的情况那样变得没有保险,那么新变量的值将是“0”。

我开始使用下面的 ifelse 语句,但我需要很长时间才能不断重复它。如果您对此有更简单的解决方案,请分享。谢谢!

df$duration=ifelse(df$feb==1,0,2)

【问题讨论】:

    标签: r conditional


    【解决方案1】:

    还有更有效的替代方案,但也许这就足够了:

    apply(DF[,-1], 1, function(x) which(x==0)[1])
    #[1]  5  5 NA  5
    

    【讨论】:

      【解决方案2】:

      另一个似乎有效的想法:

      tmp = !DF[-1]
      max.col(tmp, "first") * as.logical(rowSums(tmp))
      #[1] 5 5 0 5
      

      在哪里

      DF = structure(list(ID = 101:104, Jan = c(1L, 1L, 1L, 1L), Feb = c(1L, 
      1L, 1L, 1L), Mar = c(1L, 1L, 1L, 1L), Apr = c(1L, 1L, 1L, 1L), 
          May = c(0L, 0L, 1L, 0L), Jun = c(0L, 0L, 1L, 1L), Jul = c(1L, 
          0L, 1L, 1L), Aug = c(1L, 0L, 1L, 0L), Sep = c(1L, 0L, 1L, 
          1L), Oct = c(1L, 0L, 1L, 1L), Nov = c(1L, 0L, 1L, 1L), Dec = c(1L, 
          0L, 1L, 1L)), .Names = c("ID", "Jan", "Feb", "Mar", "Apr", 
      "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), class = "data.frame", row.names = c(NA, 
      -4L))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        相关资源
        最近更新 更多