R Logic Для назначения HH Travel Surveys - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь сделать логичное заявление, которое бы организовало туры по дому. Тур по определению - это серия поездок, которые начинаются дома и заканчиваются дома. В этом наборе данных Triptype дает вам информацию. 1 = Дом 2-5 - это не домашние поездки. Я хочу иметь возможность создать номер тура для каждого номера образца и perno (person #). В HH может быть больше одного человека, у которого совершенно другие поездки, чем у другого perno. Так что для сампно 1032558 в HH только 1 человек, и его тур № 1 - 1-4-4-5-4-4-1. Я включил ссылку на весь набор данных, если это поможет, но мне просто нужна помощь с циклом, который мог бы создать новый столбец для Tour # на основе Sampno, Perno и Triptype, чтобы Tour # был достаточно умным знать, что необходимо сбросить счетчик номера тура на основе изменения идентификатора сампно и perno, поскольку это будет другой человек и HH.

Данные обследования домашних хозяйств

sampno|perno|tripno|plano|Trip Type
1032558 1   NA  1   1             
1032558 1   1   2   4
1032558 1   2   3   4
1032558 1   3   4   5
1032558 1   4   5   4
1032558 1   5   6   4
1032558 1   6   7   1
1033660 1   NA  1   1
1033660 1   NA  1   1
1033660 1   NA  1   1
1034462 1   NA  1   1
1034462 2   NA  1   1

1 Ответ

0 голосов
/ 29 октября 2018

Рассмотрим случайную генерацию числа путем группировки в by. Анонимная функция использует tryCatch для by срезов, которые не имеют записей, что может иметь место для более чем одного фактора. Обязательно используйте достаточно большое число, например 1:10000, для размещения ваших групп данных.

df_list <- by(tourdf, tourdf[c("sampno", "perno", "triptype")], function(sub) {      
  sub$tour_number <- tryCatch({
      set.seed(sub$sampno[1] + sub$perno[1] + sub$triptype[1])
      sample(1:10000, 1, replace=TRUE)
  }, error = function(e) return(NA))

  return(sub)      
})

new_tourdf <- do.call(rbind, df_list)

new_tourdf
#     sampno perno tripno plano triptype tour_number
# 1  1032558     1     NA     1        1         111
# 2  1032558     1      6     7        1         111
# 3  1033660     1     NA     1        1        1561
# 4  1033660     1     NA     1        1        1561
# 5  1033660     1     NA     1        1        1561
# 6  1034462     1     NA     1        1        8855
# 7  1034462     2     NA     1        1        5636
# 8  1032558     1      1     2        4        1727
# 9  1032558     1      2     3        4        1727
# 10 1032558     1      4     5        4        1727
# 11 1032558     1      5     6        4        1727
# 12 1032558     1      3     4        5         804
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...