如果其中一个有条件地发生,则识别个体群体(下一个)
Identifying groups of individuals if conditional occurence in one of them (next)
我回到之前的question/post,我得到了很好的建议,但需要额外的推动:我的想法是创建一个二元变量,该变量有条件地根据任何相关的个体状态取值家庭成员。该值由同一家庭的所有成员共享。我再举一个重现的例子:
family <- factor(rep(c("001","002","003"), c(10,8,15)),levels=c("001","002","003"), labels=c("001","002","003"), ordered=TRUE)
sx <- c(1,2,2,2,1,2,2,2,1,1,2,1,2,1,2,1,2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2,2)
ag <- c(22,8,4,2,55,9,44,65,1,7,32,2,2,1,6,9,18,99,73,1,2,3,4,5,6,7,8,9,10,18,11,22,33)
st <- factor(rep(c("a","b","c"),11))
DF <- data.frame(family, ag,sx,st) ; DF
@Psidom 提出的一个好技巧允许我创建这个新变量 NoMan
,为不包括任何 16 岁以上男性的家庭中的所有个人取值 1
:
DF <- ddply(DF, .(family), transform, NoMan = +!any(sx == 1 & ag > 16)) ; DF ## works well !!
我现在正在尝试添加另一个与年龄相关的条件:NoMan
也等于 1
只要任何 16 岁以上的男性家庭成员有 "a" 或 "b" 作为因子 st
的属性。我尝试了以下方法,但这没有用:
DF <- ddply(DF, .(family), transform, NoMan = !any(sx == 1 & ag > 16) |
all(sx == 1 & ag > 16 & st=="a") |
all(sx == 1 & ag > 16 & st=="b")) ; DF
关于家庭 001 不将值 1
取为 NoMan
的原因的任何线索?谢谢...
与以下比较:
DF <- ddply(DF, .(family), transform, NoMan = +!any((sx == 1 & ag > 16) &
((sx == 1 & ag > 16 & st != "a") & (sx == 1 & ag > 16 & st != "b"))))
或者使用简化的
DF <- ddply(DF, .(family), transform, NoMan = +!any(sx == 1 & ag > 16
& (st != "a" & st != "b")))
我回到之前的question/post,我得到了很好的建议,但需要额外的推动:我的想法是创建一个二元变量,该变量有条件地根据任何相关的个体状态取值家庭成员。该值由同一家庭的所有成员共享。我再举一个重现的例子:
family <- factor(rep(c("001","002","003"), c(10,8,15)),levels=c("001","002","003"), labels=c("001","002","003"), ordered=TRUE)
sx <- c(1,2,2,2,1,2,2,2,1,1,2,1,2,1,2,1,2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2,2)
ag <- c(22,8,4,2,55,9,44,65,1,7,32,2,2,1,6,9,18,99,73,1,2,3,4,5,6,7,8,9,10,18,11,22,33)
st <- factor(rep(c("a","b","c"),11))
DF <- data.frame(family, ag,sx,st) ; DF
@Psidom 提出的一个好技巧允许我创建这个新变量 NoMan
,为不包括任何 16 岁以上男性的家庭中的所有个人取值 1
:
DF <- ddply(DF, .(family), transform, NoMan = +!any(sx == 1 & ag > 16)) ; DF ## works well !!
我现在正在尝试添加另一个与年龄相关的条件:NoMan
也等于 1
只要任何 16 岁以上的男性家庭成员有 "a" 或 "b" 作为因子 st
的属性。我尝试了以下方法,但这没有用:
DF <- ddply(DF, .(family), transform, NoMan = !any(sx == 1 & ag > 16) |
all(sx == 1 & ag > 16 & st=="a") |
all(sx == 1 & ag > 16 & st=="b")) ; DF
关于家庭 001 不将值 1
取为 NoMan
的原因的任何线索?谢谢...
与以下比较:
DF <- ddply(DF, .(family), transform, NoMan = +!any((sx == 1 & ag > 16) &
((sx == 1 & ag > 16 & st != "a") & (sx == 1 & ag > 16 & st != "b"))))
或者使用简化的
DF <- ddply(DF, .(family), transform, NoMan = +!any(sx == 1 & ag > 16
& (st != "a" & st != "b")))