0

我有一个dataframe重复的 ID,我想得到一个colunm包含每个 ID 的第一次出现的。

例如:

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

我想获取 colunm FIRST_OC1如果这是第一个 ID 出现,则返回,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

有人可以帮我弄清楚出了什么问题吗?

非常感谢。

4

2 回答 2

1

我们可以用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
于 2020-01-09T19:16:58.007 回答
1

duplicated是要使用的功能!

df$FIRST_OC <- ifelse(!duplicated(df$ID), 1, 0)
# OR
df$FIRST_OC <- as.numeric(!duplicated(df$ID))
于 2020-01-09T19:17:41.603 回答