通过计算 R 中的中位数来计算误差

杰姆

我只想计算表中所有值的平均值/中位数。我尝试了几个函数,但似乎没有任何效果,我总是收到诸如“参数不是数字或逻辑的:返回 NA”或“对象不能被强制键入“双精度”之类的错误。

我有一个由 11 列组成的表格。我的数据中有几个 NA。

我尝试了以下方法:

mean(WDB1, na.rm=TRUE)

没有用,所以我认为也许as.numeric会有所帮助:

as.numeric(WDB1, na.rm=TRUE)

我还尝试构建一个数据框并使用apply.

str(WDB1) 的输出是:

'data.frame':   18 obs. of  11 variables:
 $ Artname: Factor w/ 18 levels "Andrena carotonica",..: 11 9 10 7 8 12 15 14 1 3 ...
 $ X1     : int  2 0 7 NA NA NA NA NA NA NA ...
 $ X2     : int  4 1 41 NA NA NA NA NA NA NA ...
 $ X3     : int  27 7 39 5 NA NA NA NA NA NA ...
 $ X4     : int  37 5 32 NA 7 2 NA 1 NA NA ...
 $ X5     : int  38 3 33 2 NA NA NA NA NA NA ...
 $ X6     : int  35 12 33 NA NA NA NA NA NA NA ...
 $ X7     : int  12 4 44 NA NA NA NA NA NA NA ...
 $ X8     : int  12 15 24 NA NA NA NA NA NA NA ...
 $ X9     : int  30 0 39 NA NA NA NA NA NA NA ...
 $ X10    : int  18 2 33 1 NA NA NA NA 1 NA ...

输出(WDB1)

structure(list(Artname = structure(c(11L, 9L, 10L, 7L, 8L, 12L, 
15L, 14L, 1L, 3L, 2L, 4L, 5L, 17L, 13L, 16L, 18L, 6L), .Label = c("Andrena carotonica", 
"Andrena cineraria", "Andrena dorsata", "Andrena flavipes", "Andrena nigriceps", 
"Anthopora plumipes", "Bombus hortorum", "Bombus humilis", "Bombus lapidarius", 
"Bombus lucorum", "Bombus pascuorum", "Bombus pratorium", "Colletes similis", 
"Heriades truncorum", "Lasioglossum punctatissimum", "Lasioglosum lucidulum", 
"Melitta haemorrhoridales", "Sphecodes puncticeps"), class = "factor"),

    X1 = c(2L, 0L, 7L, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, 
    2L, 1L, 1L, NA, NA), X2 = c(4L, 1L, 41L, NA, NA, NA, NA, 
    NA, NA, NA, NA, 1L, 1L, NA, NA, NA, 1L, NA), X3 = c(27L, 
    7L, 39L, 5L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA), X4 = c(37L, 5L, 32L, NA, 7L, 2L, NA, 1L, NA, 
    NA, 1L, NA, NA, NA, NA, NA, NA, 3L), X5 = c(38L, 3L, 33L, 
    2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
    ), X6 = c(35L, 12L, 33L, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, 1L, NA), X7 = c(12L, 4L, 44L, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), X8 = c(12L, 
    15L, 24L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA), X9 = c(30L, 0L, 39L, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), X10 = c(18L, 2L, 33L, 
    1L, NA, NA, NA, NA, 1L, NA, NA, 1L, 1L, NA, NA, 1L, NA, 1L
    )), class = "data.frame", row.names = c(NA, -18L))

我是 R 的新手,非常感谢您的帮助!

罗兰

我已经有了每列的平均值/中位数。现在我需要它来自我的数据框中的所有值。

据推测,这意味着除第一列(这是一个因子列)之外的所有列的平均值。

这样做的步骤是:

子集 data.frame 以删除第一列:

WDB1[,-1]
#   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#1   2  4 27 37 38 35 12 12 30  18
#2   0  1  7  5  3 12  4 15  0   2
#3   7 41 39 32 33 33 44 24 39  33
#4  NA NA  5 NA  2 NA NA NA NA   1
#5  NA NA NA  7 NA NA NA NA NA  NA
#6  NA NA NA  2 NA NA NA NA NA  NA
#7  NA NA NA NA NA NA NA NA NA  NA
#8  NA NA NA  1 NA NA NA NA NA  NA
#9  NA NA NA NA NA NA NA NA NA   1
#10 NA NA NA NA NA NA NA NA NA  NA
#11 NA NA NA  1 NA NA NA NA NA  NA
#12  1  1 NA NA NA NA NA NA NA   1
#13 NA  1 NA NA NA NA NA NA NA   1
#14  2 NA NA NA NA NA NA NA NA  NA
#15  1 NA NA NA NA NA NA NA NA  NA
#16  1 NA NA NA NA NA NA NA NA   1
#17 NA  1 NA NA NA  1 NA NA NA  NA
#18 NA NA NA  3 NA NA NA NA NA   1

将结果转换为向量,因为mean除了 data.frames 作为输入之外。我使用unlist是因为 data.frame 是列表,但您也可以使用as.matrix

unlist(WDB1[,-1])
# X11   X12   X13   X14   X15   X16   X17   X18   X19  X110  X111  X112  X113  X114  X115  X116  X117  X118   X21   X22   X23   X24   X25   X26 
#    2     0     7    NA    NA    NA    NA    NA    NA    NA    NA     1    NA     2     1     1    NA    NA     4     1    41    NA    NA    NA 
#  X27   X28   X29  X210  X211  X212  X213  X214  X215  X216  X217  X218   X31   X32   X33   X34   X35   X36   X37   X38   X39  X310  X311  X312 
#   NA    NA    NA    NA    NA     1     1    NA    NA    NA     1    NA    27     7    39     5    NA    NA    NA    NA    NA    NA    NA    NA 
# X313  X314  X315  X316  X317  X318   X41   X42   X43   X44   X45   X46   X47   X48   X49  X410  X411  X412  X413  X414  X415  X416  X417  X418 
#   NA    NA    NA    NA    NA    NA    37     5    32    NA     7     2    NA     1    NA    NA     1    NA    NA    NA    NA    NA    NA     3 
#  X51   X52   X53   X54   X55   X56   X57   X58   X59  X510  X511  X512  X513  X514  X515  X516  X517  X518   X61   X62   X63   X64   X65   X66 
#   38     3    33     2    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    35    12    33    NA    NA    NA 
#  X67   X68   X69  X610  X611  X612  X613  X614  X615  X616  X617  X618   X71   X72   X73   X74   X75   X76   X77   X78   X79  X710  X711  X712 
#   NA    NA    NA    NA    NA    NA    NA    NA    NA    NA     1    NA    12     4    44    NA    NA    NA    NA    NA    NA    NA    NA    NA 
# X713  X714  X715  X716  X717  X718   X81   X82   X83   X84   X85   X86   X87   X88   X89  X810  X811  X812  X813  X814  X815  X816  X817  X818 
#   NA    NA    NA    NA    NA    NA    12    15    24    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA 
#  X91   X92   X93   X94   X95   X96   X97   X98   X99  X910  X911  X912  X913  X914  X915  X916  X917  X918  X101  X102  X103  X104  X105  X106 
#   30     0    39    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    18     2    33     1    NA    NA 
# X107  X108  X109 X1010 X1011 X1012 X1013 X1014 X1015 X1016 X1017 X1018 
#   NA    NA     1    NA    NA     1     1    NA    NA     1    NA     1 

将向量传递给mean函数(确保NA通过设置处理na.rm = TRUE):

mean(unlist(WDB1[,-1]), na.rm = TRUE)
#[1] 12.2549

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章