Как назначить условия для парных строк в dplyr в R - PullRequest
1 голос
/ 20 сентября 2019

У меня длинный список парных взаимодействий между людьми.Мне нужно назначить инициатора для каждой пары наугад.Поэтому для каждой пары будет один человек, которому назначено 1, а другому будет присвоено 0.

Я попытался найти ответ на этот вопрос, так как считаю, что он должен быть решен.где-то.К сожалению, я не думаю, что мне удастся найти правильные ключевые слова.Следующий ответ был наиболее полезным:

Нумерация строк в группах во фрейме данных

Вот некоторый фиктивный код и где я нахожусь (реальные данные имеют многобольше столбцов и строк):

dummy_data <- tibble(
  ID = c(1, 1, 2, 2, 3, 3),
  Sex = c("M", "F", "F", "M", "F", "M")
)

dummy_data <- dummy_data %>%
  group_by(ID) %>%
  mutate(initiator = ifelse(row_number() == 1,
                            sample(0:1, 1),
                            (1 - row_number()[1])
                           )
        )

Идея заключается в том, что я назначу случайное значение первому человеку в каждой паре, а затем приму противоположное значение для второго.

Проблема, с которой я сталкиваюсь, заключается в «ложной» части функции ifelse() - я не могу получить значение предыдущей строки.

Желаемый вывод - это новый столбец, состоящий из *Только 1019 * с и 1 с, где у каждой пары есть только один 0 и один 1.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Если у вас есть только две строки в каждой ID, вы можете sample 0 и 1 и назначать их случайным образом.

library(dplyr)

dummy_data %>%
 group_by(ID) %>%
 mutate(initiator = sample(0:1))

#     ID Sex   initiator
#   <dbl> <chr>     <dbl>
#1     1 M             0
#2     1 F             1
#3     2 F             1
#4     2 M             0
#5     3 F             1
#6     3 M             0
0 голосов
/ 20 сентября 2019

С data.table

library(data.table)
setDT(dummy_data)[, initiator := sample(0:1), ID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...