Saya memuat data hewan dengan banyak duplikat yang saya coba gabungkan menjadi satu agen yang mewakili satu hewan. File csv terlihat seperti ini:

ID Hewan - ID Grup

1 - A

2 - A

3 - A

4 - A

1 - B

2 - B

Dan untuk contoh ini, saya berharap dapat menghasilkan 4 agen hewan unik yang memiliki daftar kelompok yang terkait dengannya. Daftar Hewan 1 adalah [A, B] dan daftar Hewan 4 hanya [A].

Sejauh ini, saya memuat csv menggunakan:

   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?

2
Andrew Yoak 10 Juli 2020, 07:00

1 menjawab

Jawaban Terbaik

Jika Anda memiliki csv yang terlihat seperti:

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

Anda dapat memuat csv sebagai daftar, menarik hewan unik, lalu memfilter daftar asli menggunakan id hewan unik untuk mengambil grup unik tempat hewan itu berasal:

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

Semoga membantu!

enter image description here

2
Luke C 10 Juli 2020, 06:26