вернуть 0 во второй экземпляр дубликата в R - PullRequest
1 голос
/ 29 мая 2019

У меня есть аналогичный набор данных для следующего:

A  B   C 
1  10  5 
1  20  1
2  30  1
2  30  1

Я бы хотел добавить столбец, возвращающий 1, пока мы не найдем дубликат A & B, когда мне нужно будет вернуть 0, но только для второго экземпляра, поэтому:

A  B   C  D
1  10  5  1
1  20  1  1
2  30  1  1
2  30  1  0

Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Опция будет

df$D <- as.integer(!duplicated(df[c("A", "B)]))
df$D
#[1] 1 1 1 0
1 голос
/ 29 мая 2019

Просто каракули с library(dplyr):

df %>% group_by(A,B) %>% mutate(D = +((1:n())==1))

Или, если вы хотите, чтобы он был равен нулю «только для второго экземпляра» , то есть третий экземпляр также будет один, тогда работает следующее:

df %>% group_by(A,B) %>% mutate(D = +!((1:n())==2))

В этом примере ваши дубликаты предназначены не только для A и B, но также C. Если это действительно так, вы можете использовать group_by_all вместо group_by(A,B).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...