我想用语法替换“#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?
答案 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输出: