我每个月都有被保险人的数据。所有变量都是虚拟变量,我需要创建一个新变量来显示一个人何时没有保险。我叫变量持续时间。我的数据集(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)
答案 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