у меня есть очень похожие проблемы с: Identify and replace duplicates elements from a vectorЗаменить повторяющиеся значения в векторе с использованием критериев из других столбцов в кадре данных
Мне нужно заменить повторяющиеся значения в столбце, происходящем в последовательности, но на основе критериев, из других столбцов в кадре данных.
У меня есть кадр данных, как это (плюс ряд дополнительных столбцов):
ID<- c("1V","1V","1V","1V","2V","2V","4V","4V","4V","4V","4V")
year<- c(1,1,1,2,1,1,2,2,3,3,3)
sequence<- c(1,2,2,1, 1,2,1,2,1,1,1)
score <- c(5,5,5,5,10,10,10,10,11,11,11)
examp <- data.frame(ID,year, sequence, score)
> examp
ID year sequence score
1 1V 1 1 5
2 1V 1 2 5
3 1V 1 2 5
4 1V 2 1 5
5 2V 1 1 10
6 2V 1 2 10
7 4V 2 1 10
8 4V 2 2 10
9 4V 3 1 11
10 4V 3 1 11
11 4V 3 1 11
Что мне нужно, чтобы заменить повторяющиеся результаты в пределах каждого ID, год и последовательности с НС. Также пара последовательностей со счетом должна быть заменена на NA. Таким образом, никакие строки не удаляются, а только конкретные записи.
> examp
ID year sequence score
1 1V 1 1 5
2 1V 1 2 5
3 1V 1 NA NA
4 1V 2 2 5
5 2V 1 1 10
6 2V 1 2 10
7 4V 2 1 10
8 4V 2 2 10
9 4V 3 1 11
10 4V 3 NA NA
11 4V 3 NA NA
Все строки сохранены. Те же самые оценки могут встречаться в разных идентификаторах/годах/последовательностях, но только в каждой уникальной комбинации этих трех столбцов я могу заменить дубликат.
Пример с одним вектором и решения от другого связанного вопроса:
a <- 1 1 1 2 3 2 2 2 2 1 0 0 0 0 2 3 4 4 1 1
ifelse(a == c(a[1]-1,a[(1:length(a)-1)]) , 0 , a)
[1] 1 0 0 2 3 2 0 0 0 1 0 0 0 0 2 3 4 0 1 0
Я уверен в том, как адаптировать код выше в вопросе выше с несколькими критериями. Является ли это возможным? Прежде всего, самое главное - заменить баллы, но если у кого-то есть решение заменить как оценки, так и последовательность, я был бы очень доволен.
Спасибо, это было просто и отлично! – Lisarv