ID группы на основе индивидуального ранга - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующие индивидуальные данные, и я хочу сделать уникальный идентификатор домохозяйства.Каждый человек уже имеет свой ранг в домашнем хозяйстве, поэтому в основном ранг 1 отмечает начало нового домашнего хозяйства.например,

rank name
1    John
2    Lisa
3    Stu
1    Phil
1    Mike
1    Florence
2    George
3    David
4    Diana
1    Eleanor

Результат, который я ищу, таков:

rank name      id
1    John      1
2    Lisa      1
3    Stu       1
1    Phil      2
1    Mike      3
1    Florence  4
2    George    4
3    David     4
4    Diana     4
1    Eleanor   5

Количество участников составляет около 320 000, поэтому идентификатор группы должен быть от 1 до суммы (df $ rank [rank)= 1]) или что-то подобное.Любой другой тип уникального идентификатора также работает, он не должен быть seq (1, n, 1).

1 Ответ

0 голосов
/ 04 декабря 2018
df$id <- cumsum(df$rank == 1)

#    rank     name id
# 1     1     John  1
# 2     2     Lisa  1
# 3     3      Stu  1
# 4     1     Phil  2
# 5     1     Mike  3
# 6     1 Florence  4
# 7     2   George  4
# 8     3    David  4
# 9     4    Diana  4
# 10    1  Eleanor  5

Как заметил @Andre Elrico, если rank равно NA для каких-либо строк, приведенный выше метод даст вам NA для id во всех последующих строках, так что вы можете использовать опцию нижеесли вы знаете, rank может быть NA (но не тогда, когда должно быть 1).

df$id <- cumsum(df$rank %in% 1)

Используемые данные:

df <- read.table(text = '
rank name
1    John
2    Lisa
3    Stu
1    Phil
1    Mike
1    Florence
2    George
3    David
4    Diana
1    Eleanor
', header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...