计算计算值的平均值

时间:2017-11-02 10:55:45

标签: r

我想计算abs(((column A - column B)/column A)*100)

返回的结果值的平均值

因此,例如在mtcars数据上我尝试:

> mtcars
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
...

mean((abs(mtcars['cyl']-mtcars['mpg'])/mtcars['mpg'])*100)

这给了我错误:

  

警告讯息:在mean.default中((abs(mtcars [“cyl”] -   mtcars [“mpg”])/ mtcars [“mpg”])*:参数不是数字或   逻辑:返回NA

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您需要使用$运算符将值提取为向量或使用双括号,即

mean((abs(mtcars[['cyl']]-mtcars[['mpg']])/mtcars[['mpg']])*100)
#[1] 64.13455

#or

 mean((abs(mtcars$cyl-mtcars$mpg)/mtcars$mpg)*100)
#[1] 64.13455

你可以看到结构上的差异,

str(mtcars['cyl'])
'data.frame':   32 obs. of  1 variable:
 $ cyl: num  6 6 4 6 8 6 8 4 4 6 ...

str(mtcars[['cyl']])
 num [1:32] 6 6 4 6 8 6 8 4 4 6 ...

str(mtcars$cyl)
 num [1:32] 6 6 4 6 8 6 8 4 4 6 ...

答案 1 :(得分:1)

一个整齐的替代方案:

library(dplyr)
mtcars %>% 
  summarise(Mean = mean(abs(cyl - mpg)/mpg) * 100)

      Mean
1 64.13455