1

我尝试对一组列表执行操作。例如:
列表:(1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5), (1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), (1, 1, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA), (1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5)

然后我想例如有一个包含手段的列表。Mean[lists] 无法正常运行,因为它不知道如何处理缺失值“NA”。我期望的是:(1、1、5/3、7/3、3、4、4等)

有人如何忽略缺失或“文本”值?例如,就像您在 excel 中操作这样的功能一样。谢谢!

4

2 回答 2

2
l = {{1, 1, 1, "NA", "NA"}, {2, 3, 4, 5, "NA"}}
Mean@# & /@ (Cases[#, Except@"NA"] & /@ l)

(*
-> {1, 7/2}
*)
于 2012-04-11T18:22:01.367 回答
2

看起来您对矩阵列的平均值感兴趣。如果你的数据数组是矩形的,你可以做这样的事情

lst = {{1, 1, 1, "NA", "NA"}, {2, 3, 4, 5, "NA"}, {6, 7, 8, 9, 10}};
Mean /@ DeleteCases[Transpose[lst], a_ /; Not[NumericQ[a]], {-1}]

一种更简单的方法是将用于不可用元素(例如"NA"in lst)的任何符号替换为Sequence[]

Mean /@ (Transpose[lst] /. "NA" -> Sequence[])
于 2012-04-12T10:18:27.210 回答