Merging files

No preview image

1 collaborator

Default-person Matthias Müller (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0.4 • Viewed 249 times • Downloaded 23 times • Run 0 times
Download the 'Merging files' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;;; Created by Matthias Müller
;;; Creative Commons License: This work is licensed under a Creative Commons Attribution License CCBY 4.0



extensions [csv table array]

to merge-files
  reset-timer
  let which-file user-file
  show (word "loading 1. file: " which-file)
  let input csv:from-file which-file
  if "[run number]" !=  first first input [
    repeat 6 [
      set input but-first input
    ]
  ]
  set input map [x -> but-first X] input
  let a 1
  repeat Number_of_files - 1 [
    set a a + 1
    set which-file user-file
    show (word "loading " a ". file: " which-file)
    let temp-input csv:from-file which-file
    ifelse "[run number]" !=  first first temp-input [
      repeat 7 [
        set temp-input but-first temp-input
      ]
    ][
      set temp-input but-first temp-input
    ]
    set temp-input map [x -> but-first X] temp-input
    ;; merge
    set input (sentence input temp-input)
  ]

  if delete-columns [
    show "deleting columns"
    let col-to-delete []
    foreach n-values length first input [?1 -> ?1] [col ->
      let temp length remove-duplicates map [row -> item col row] but-first input
      if temp = 1 [
        set col-to-delete lput col col-to-delete
      ]
    ]
    let temp-output []
    show (word length col-to-delete " unnecessary columns found")
    foreach input [row ->
      let temp-row row
      foreach reverse col-to-delete [col ->
        set temp-row remove-item col temp-row
      ]
      set temp-output lput temp-row temp-output
    ]
    set input temp-output
  ]

  csv:to-file output-file-merge-files input
  show (word "done in " timer " seconds")
  set input []
end 

to Merge-rows
  ca
  reset-timer
  let input csv:from-file user-file
  if file-has-netlogo-header? [
    repeat 6 [
      set input but-first input
    ]
    set input map [x -> but-first X] input
  ]
  let result []
  set result lput first input result
  ; find the ("[step]") column
  let sep 1 + position "[step]" first input
  ; get a list of uique parameter settings (para-sets)
  let para-sets remove-duplicates map [? -> sublist ? 0 sep ] but-first input
  show (word length para-sets " different parameter settings found")
  ;; copying rows of input into a temp. result file (temp-results) for each parameter setting
  let temp-results table:make
  foreach para-sets [? ->
    table:put temp-results ? []
  ]
  let counter 1
  foreach but-first input [rows ->
    if counter / 10000 = int (counter / 10000 )[
      if show-progress [ show (word "step: " counter ", " precision (counter / length input * 100) 2 "%")]
    ]
    set counter counter + 1
    ifelse table:get temp-results sublist rows 0 sep = [] [
      table:put temp-results sublist rows 0 sep (list sublist rows sep length rows)
    ][
      let temp table:get temp-results sublist rows 0 sep
      set temp lput ( sublist rows sep length rows) temp
      table:put temp-results (sublist rows 0 sep) temp
    ]
  ]
  set temp-results table:to-list temp-results
  show "merging"
  ;now go through the temp. results and merge the results for each parameter setting
  foreach temp-results [para-set ->
    let temp-mean []
    foreach n-values length first last para-set [x -> x] [pos ->
      set temp-mean lput mean map [elem -> item pos elem] last para-set temp-mean
    ]
    set result lput (sentence first para-set temp-mean) result
   ]
   show (word "done in: " timer " seconds")
   csv:to-file output-file-merge-rows result
end 

There is only one version of this model, created over 6 years ago by Matthias Müller.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.