С помощью tidyverse
вы можете сделать:
df %>%
group_by(box_num) %>%
mutate_at(vars(x:y), funs(ifelse(. %in% subset(rle(sort(.))$values, rle(sort(.))$length > 1), NA, .)))
box_num date x y
<fct> <fct> <dbl> <dbl>
1 6-WQ 2018-11-18 20.2 8.00
2 6-WQ 2018-11-25 NA 7.20
3 6-WQ 2018-12-2 NA 23.0
4 25-LR 2018-11-18 375. 4.30
5 25-LR 2018-11-25 NA 9.30
6 25-LR 2018-12-2 NA 4.00
7 73-IU 2018-12-2 NA NA
8 73-IU 2018-12-9 28.0 NA
9 73-IU 2018-12-16 NA 52.8
Во-первых, он сортирует значения по «х» и «у» и вычисляет длину пробега равных значений. Во-вторых, он создает подмножество для тех значений, у которых длина прогона> 1. Наконец, он сравнивает, находятся ли значения в «x» и «y» в подмножестве, и если да, то они получают NA.
SELECT ROW_NUMBER() OVER (ORDER BY beatle_name ASC) AS ROWID, * FROM beatles
Проверьте row_number () функция; необходимо смочь сделать это в DB2 через:
SELECT row_number(), first_name FROM beatles
Я почти уверен, что это не часть стандарта SQL, хотя, таким образом, это вряд ли будет портативно, должен тот когда-либо быть проблемой.
SELECT ROW_NUMBER() OVER(ORDER BY BEATLE_NAME) ROWNUM,BEATLE_NAME FROM BEATLES;