netlogo:自NetLogo 6.0.3以来csv电子表格中没有“”

时间:2018-06-14 14:44:48

标签: csv spreadsheet netlogo

我想用语法替换“#N / A”而不是计算值0,但是“”不会显示在NetLogo 6.0.3的csv文件中(显示为⇒#N / A.I我想要通过将“#N / A”与Excel中的数值数据混合来计算平均值,但是#N / A显示为计算结果。如果“#N / A”显示为csv文件,则可以使用Excel。在NetLogo 6.0.1中,这是可能的。我应该怎么做NetLogo 6.0.3?

2 个答案:

答案 0 :(得分:3)

执行此操作的“正确”方法是通过忽略平均值中的N/A来处理excel。这样,您将这些值保存为N/A,因此必须意识到如何处理它们。您可以通过计算=AVERAGE(IF(ISNUMBER(A2:A5), A2:A5))之类的平均值,然后使用ctrl + shift + enter而不是输入来输入。当然,这有点令人讨厌。

要在netlogo端解决此问题,请报告值"\"#N/A\""而不是"#N/A"。这将在您导入到Excel时保留引号。或者,您可以输出除"#N/A"之外的任何其他字符串。例如,报告"not-a-number"会使其成为字符串,甚至只使用空字符串。您在excel中看到的引号实际上是字符串的一部分,而不仅仅是字段是字符串的指示符。通常,CSV中的字段没有类型。 Excel只是解释它可以作为数字。它将#N/A的确切字段视为特殊字段,因此以任何方式修改它(不只是在它周围添加引号)将阻止它以这种特殊方式进行解释。

同样值得注意的是,这是以前版本的NetLogo中的一个错误(我假设你在这里使用BehaviorSpace; CSV扩展一直以这种方式工作)。如果字符串的开头和结尾没有引号,则无法输出字符串。也就是说,字符串值本身会有引号。这种行为是修复它的结果。现在,您可以根据需要输出真值#N/A,这是以前无法做到的。

答案 1 :(得分:2)

也许这对你有用。假设您启用了csv扩展程序:

extensions [ csv ]

您可以使用记者将列表(或列表列表)中的0值替换为字符串值"#NA" (或" N / A"如果你愿意,但对我来说#NA适用于Excel)。

to-report replace-zeroes [ list_ ]
  if list_ = [] [ report [] ]
  let out map [ i ->
    ifelse-value is-list? i 
    [ replace-zeroes i ]
    [ ifelse-value ( i != 0 ) [ i ] [ "#NA" ] ]
  ] list_
  report out
end

快速检查:

to test
  ca  
  ; make fake list of lists for csv output
  let fake n-values 3 [ i -> n-values 5 [ random 4 ] ]

  ; replace the 0 values with the NA values
  let replaced replace-zeroes fake

  ; print both the base and 0-replaced lists
  print fake
  print replaced

  ; export to csv
  csv:to-file "replaced_out.csv" replaced
  reset-ticks
end

观察者输出(随机):

[[0 0 2 2 0] [3 0 0 3 0] [2 3 2 3 1]]
[[#NA #NA 2 2 #NA] [3 #NA #NA 3 #NA] [2 3 2 3 1]]

Excel输出:

enter image description here