Как получить первое вхождение персонажа в R - PullRequest
0 голосов
/ 09 января 2020

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

Например:

ID <- as.character( "ae61_10", "ae61_10", "ae61_10", "ae61_10", "ae61_10", "ae61_1",  "ae61_1", "ae61_1",  "ae61_11", "ae61_2",  "ae61_2",  "ae61_3",  "ae61_4",  "ae61_4", "ae61_5",  "ae61_6",  "ae61_7",  "ae61_8",  "ae61_8",  "ae61_8",  "ae61_9")
df <- data.frame(ID)
df
        ID
1  ae61_10
2  ae61_10
3  ae61_10
4  ae61_10
5  ae61_10
6   ae61_1
7   ae61_1
8   ae61_1
9  ae61_11
10  ae61_2
11  ae61_2
12  ae61_3
13  ae61_4
14  ae61_4
15  ae61_5
16  ae61_6
17  ae61_7
18  ae61_8
19  ae61_8
20  ae61_8
21  ae61_9

I хотите получить столбец FIRST_OC, который возвращает 1, если это первое появление идентификатора, и 0, если это не так. Например:

        ID FIRST_OC
1  ae61_10        1
2  ae61_10        0
3  ae61_10        0
4  ae61_10        0
5  ae61_10        0
6   ae61_1        1
7   ae61_1        0
8   ae61_1        0
9  ae61_11        1
10  ae61_2        1
11  ae61_2        0
12  ae61_3        1
13  ae61_4        1
14  ae61_4        0
15  ae61_5        1
16  ae61_6        1
17  ae61_7        1
18  ae61_8        1
19  ae61_8        0
20  ae61_8        0
21  ae61_9        1

Я пробовал эту команду, но она не работала:

df$FIRST_OC <- 0
FIRST_OC <- df[match(unique(df$ID), df$ID),]
df$FIRST_OC[which(df$ID %in% FIRST_OC)] <- 1

Может ли кто-нибудь помочь мне выяснить, что происходит не так?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 09 января 2020

duplicated - это используемая функция!

df$FIRST_OC <- ifelse(!duplicated(df$ID), 1, 0)
# OR
df$FIRST_OC <- as.numeric(!duplicated(df$ID))
1 голос
/ 09 января 2020

Мы можем использовать duplicated

+(!duplicated(df$ID))
#[1] 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 0 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...