Как перекодировать дублированные, тройные или более элементов в строке в r

#r

Вопрос:

У меня есть фрейм данных, и в строке они дублируются, имеют тройное или большее значение. Я хочу сохранить первое значение и перекодировать как Na или -2 остаток элемента, но у меня есть некоторые проблемы. Вы не могли бы мне помочь?

например, мои данные

Я пытаюсь использовать этот код r:

N

кольн

для (i в 1:N) {

для (j в coln) {

    va <- which(table(dfriend[i, coln])>1)
   
   if (length(va)>0){
     data[i, j]   <- -2
   }

  else { 
    if (is.na(data[i, j]) {
    data[i, j]   <- -3
  }
}
 

}
}

Комментарии:

1. пожалуйста, предоставьте свои данные в виде кода, а не изображений или ссылок

2. вы можете использовать dput()

Ответ №1:

Мы могли бы использовать duplicated (предполагая, что это по столбцам)

 dfriend[coln] <- lapply(dfriend[coln], function(x) {
                          i1 <- is.na(x)
                          i2 <- duplicated(x)
                          x[i2] <- -2
                         x[i1] <- -3
                         x})
 

если мы хотим проверить заменить строкой, используйте apply

 dfriend[coln] <- t(apply(dfriend[coln], 1, function(x) {
           i1 <- is.na(x)
                          i2 <- duplicated(x)
                          x[i2] <- -2
                         x[i1] <- -3
                         x}))