Загрузка дубликатов / слияние переменных - PullRequest
2 голосов
/ 10 июля 2020

Я загружаю данные о животных с множеством дубликатов, которые пытаюсь объединить в один агент, представляющий одно животное. Файл csv выглядит так:

Идентификатор животного - Идентификатор группы

1 - A

2 - A

3 - A

4 - A

1 - B

2 - B

И для этого примера я надеюсь создать 4 уникальных агента для животных, у которых есть список групп они связаны с. Список животного 1 будет [A, B], а список животного 4 будет только [A].

Пока я загружаю csv, используя:

   csv:from-row file-read-line
   create-animal 1 [
        set Animal-ID item 0 data
        set group-ID item 1 data]


Which produces 6 animals with one group id each.

But how should I cull the duplicate animals?

1 Ответ

2 голосов
/ 10 июля 2020

Если у вас есть CSV, который выглядит так:

id, group
1,A
2,A
3,A
4,A
1,B
2,B

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

extensions [ csv ]

breed [ animals animal ]

animals-own [ animal-id group-id ]

to setup 
  ca
  
  ; Load animal data as a list of lists, drop the headers
  let animalData but-first csv:from-file "exampleAnimals.csv"
  print animalData
  
  ; Get the unique animal ids
  let animalIds remove-duplicates map [ i -> first i ] animalData
  print animalIds
  
  foreach animalIds [ id ->
    create-animals 1 [
      
      ; Set the id
      set animal-id id
      
      ; Filter the animal data by the id of the current animal
      let filtered filter [ row -> first row = id ] animalData
         
      ; Map to pull the group id as a list and assign to the animal
      set group-id map [ i -> last i ] filtered
      
      fd 1
    ]    
  ]
  reset-ticks
end

Надеюсь, это поможет!

введите описание изображения здесь

...