Создание фиктивной переменной в R

Я новичок в R и пытаюсь создать несколько новых переменных. В основном в моем наборе данных есть люди с переменной для идентификатора матери (т.е. если у двух человек одна и та же мать, значение этой переменной будет одинаковым).

Чтобы упростить задачу, скажем, я хочу создать фиктивную переменную, которая = 1, если два человека являются братьями и сестрами. Я пробовал использовать:

    dummy <- as.numeric(duplicated(Identifiers_age$MPUBID) = TRUE)

но вектор я получаю только = 1 для одного из братьев и сестер. Что мне делать?

Спасибо


person Milhouse    schedule 22.07.2016    source источник
comment
вы смотрите на сумму? или вы хотите сгруппироваться? без фиктивного набора данных и ожидаемого результата трудно сказать, что вам нужно (количество братьев / сестер или просто есть ли хотя бы 1)   -  person Tensibai    schedule 22.07.2016
comment
отредактируйте свой вопрос, чтобы прояснить его, НЕ размещайте код в комментариях   -  person Tensibai    schedule 22.07.2016
comment
Извините, я должен был быть яснее, я просто ищу двоичную переменную, которая = 1, если у человека есть хотя бы один брат или сестра.   -  person Milhouse    schedule 22.07.2016
comment
Итак, примите ответ @lmo, это то, что вы ищете.   -  person Tensibai    schedule 22.07.2016


Ответы (2)


Если ваша цель - вернуть вектор из 0 и 1, где он равен 1, если у единицы наблюдения есть родственник, тогда вы хотите включить второй оператор duplicated с fromLast = TRUE.

Первая дублированная функция вернет 1 для того количества братьев и сестер, которое есть в MPUBID после первого брата, а вторая дублированная функция заберет первого брата.

hasSiblings <- as.integer(duplicated(Identifiers_age$MPUBID) | 
                          duplicated(Identifiers_age$MPUBID, fromLast=TRUE))

| - это векторный логический оператор ИЛИ. Обратите внимание, что duplicated возвращает логический вектор, поэтому вам не нужно включать = TRUE после него, как вы это сделали в своем вопросе.

person lmo    schedule 22.07.2016

dplyr ответ:

library(dplyr)

Identifiers_age %>%
  group_by(MPUBID) %>%
  mutate(hasSiblings = as.integer(n() > 1))
person Axeman    schedule 22.07.2016