纵向数据的R条件变量

时间:2014-06-25 14:51:42

标签: r conditional

我每个月都有被保险人的数据。所有变量都是虚拟变量,我需要创建一个新变量来显示一个人何时没有保险。我叫变量持续时间。我的数据集(df)看起来像这样:

  

ID Jan Feb Mar Apr May May Jun 7月9月10月11月11月

     

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

     

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

在数据集中,1是保险,0是未保险。我的新变量将具有当人从1变为0时的col位置。例如,在第一行中,我的变量持续时间将具有值5因为可能。我只对0的第一个例子感兴趣。例如,在第4行中,我只需要5可以并且可以忽略8月。此外,如果此人没有像103的情况那样没有保险,则新变量的值只有“0”。

我开始使用下面的ifelse语句,但是我需要花费很多时间来重复它。如果您有更简单的解决方案,请分享。谢谢!

  

DF $持续时间= ifelse(DF $二月== 1,0,2)

2 个答案:

答案 0 :(得分:1)

另一个似乎有效的想法:

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))

答案 1 :(得分:0)

有更有效的替代方案,但这可能就足够了:

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