Я возвращаюсь к предыдущему вопросу/сообщению, для которого у меня есть хорошие предложения, но нужно дополнительное толчок: идея состоит в создании двоичной переменной, которая принимает независимо от количества членов семьи. Это значение разделяют все члены одной семьи. я поставил опять reproducive пример:Идентификация групп лиц, если условное возникновение в одном из них (следующее)
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
, принимая значение 1
для всех людей из семьи, которая не включает в себя любой человек старше 16 лет:
DF <- ddply(DF, .(family), transform, NoMan = +!any(sx == 1 & ag > 16)) ; DF ## works well !!
Я сейчас пытаюсь добавить еще одно условие, связанные с возрастом: NoMan
также будет равна 1
всякий раз, когда какой-либо из членов семьи мужского пола старше 16 имеет «а» или «б» в качестве атрибута для фактора 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
? Спасибо ...
Спасибо за ваш ответ, кажется, работает, но я не уверен, я понимаю (и я бы хотел): в вашем первом предложении, которое я предпочитаю, функция '+! any (' сначала определит семейства без какого-либо человека> 16 '(sx == 1 & ag> 16)', что прекрасно, но тогда '+! any (' также относится ко второму выражению no? i ожидало бы, что оно даст значение «1» всем членам, не имеющим ЛЮБОГО человека> 16 с 'st ==" a "или' st == "b" '? – den
Спасибо @ Даршан! я понимаю, это нелегко! я мог проверить, что это работает с использованием немного другого 'DF':' family <- factor (rep (c («001», «002», «003», «004»), c (10,8,15 , 3)), уровни = c («001», «002», «003», «004»), метки = c («001», «002», «003», «004»), упорядоченные = TRUE) sx <- c (2,2,2,2,1,2,2,2,1,1,2,1,2,1,2,1,2,2,2,2,1,2,2 , 1,2,1,2,1,2,1,2,1,2,2,2,1,1) 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 , 19,5,19) st <- factor (rep (c ("a", "b", "c"), 12)) DF <- data.frame (family, ag, sx, st); DF ' – den