Как удалить определенное количество дубликатов c в списке (R)? - PullRequest
0 голосов
/ 05 февраля 2020

Скажем, у меня есть список:

list <- c("<10", "<10", "4", "<10", "5", "6", "<10", "<10")

Этот код удалит все значения "<10": </p>

without_lessthan10 <- list[list != "<10"]

Есть ли способ удалить Speci c число из "<10" с? Например, что я могу использовать, чтобы удалить три из «<10» и остаться с двумя другими? </p>

[1] "4", "5", "6", "<10", "<10" 

или

[1] "<10", "4", "5", "6", "<10"

Есть ли способ автоматизировать его (например, "<10" * 3), чтобы мне не пришлось указывать удаляемые индексы? </p>


Я написал несколько запутанную функцию, которая, кажется, выполняет эту работу, но все равно хотел бы знать, может ли кто-нибудь придумать лучший / более компактный способ сделать это.

list1 = c("<10", "<10", "4", "<10", "5", "6", "<10", "<10")

remove_specific_dupes <- function(list, element, num_to_remove) {
  element_counter = 0
  list_counter = 1
  Max=length(list)
  new_list = list()
  while (list_counter <= Max) {
    if (element_counter < num_to_remove){
      if (list[list_counter]!=element){
        new_list[length(new_list)+1] <- list[list_counter]
      } else {
        element_counter=element_counter+1
      }
    } else {
      new_list[length(new_list)+1] <- list[list_counter]
    }
    list_counter=list_counter+1
  }
  return (unlist(new_list))
  }


removed_three_lessthantens_from_list1 <- remove_specific_dupes(list1, "<10", 3)

#removed_three_lessthantens_from_list1 = c("4","5","6","<10","<10")
...