【发布时间】:2017-05-11 23:03:03
【问题描述】:
我正在尝试从数据库中识别(使用二进制 1/0 变量)主题组,只要该组中至少有一个主题满足两个条件。
我的数据库DF由描述每个成员的性别和年龄的家庭组成(以及家庭 ID family):我想创建一个新的二进制变量NoMan,如果至少为 0一个家庭的男性(sx 属性为1)的年龄超过 16 岁,否则将取值 1。请注意,我希望 NoMan 与来自同一家庭的所有成员。
family <- factor(rep(c("001","002","003"), c(10,8,15)),
levels=c("001","002","003"), labels=c("001","002","003"), ordered=TRUE)
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)
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)
DF <- data.frame(family, ag, sx)
DF
我曾尝试将ddply与ifelse结合使用,但这并不成功:
DF <- ddply(DF,.(family), transform, NoMan=ifelse(sx==1 & ag>16, 1, 0))
DF
似乎除了最终的其他限制之外,在此脚本中,函数适用于个人而不是家庭(我实际上希望他们将相同的结果应用于同一家庭的所有成员)。
我觉得我在正确的轨道上,但也许有人对这个问题有很好的解决方案?
PS:刚刚编辑了DF,因为在这个例子中我希望家庭003的所有成员都被标记为NoMan==1
【问题讨论】:
-
谢谢 Uwe Block
-
因为你已经改变了 Q,我猜所有的答案——尤其是 S van Balen 接受的答案——也应该被修改。
-
确实是Uwe Block,我的错……年龄条件应该都是
ag>16。大多数答案在这里都很好用。谢谢
标签: r conditional plyr