带数据框的R统计函数故障

时间:2018-09-09 08:54:40

标签: r function dataframe

在数据框中使用mean(),sd()等函数时,出现“参数不是数字或逻辑”错误。

我从两个向量创建了一个简单的框架以测试功能(即,将stat函数与数据框架一起使用)。

str()给出以下内容:

'data.frame':   195 obs. of  2 variables:
 $ Births  : num  10.2 35.3 46 12.9 11 ...
 $ Internet: num  78.9 5.9 19.1 57.2 88 ...

使用mean()函数:

mean(frame2, na.rm=TRUE)

礼物:

  

警告信息:   在mean.default(frame2,na.rm = TRUE)中:     参数不是数字或逻辑:返回NA

我已经看过以前的建议,不要在数据帧中使用mean(),这很好,但不是重点。

我正在阅读O'Reilly R Cookbook,它声称您应该能够在数据帧中使用mean()和sd()。

但是,我无法使其正常工作。

2 个答案:

答案 0 :(得分:1)

关于您的问题:

我无权访问您的书或其他学习资源,但最好的学习工具是R帮助。因此,要了解参数的类型,您可以执行?mean,它说:

mean(x, trim = 0, na.rm = FALSE, ...)
Arguments

x   An R object. Currently there are methods for numeric/logical vectors and date, date-time and time interval objects. Complex vectors are allowed for trim = 0, only. 

因此,正如它所解释的那样,它也基于this question,最适合vectors使用,我认为您的书有些陈旧。 获取您的R版本,并将其与书籍进行比较。


在此示例中,它对我来说效果很好:

dt<-data.frame(Births =sample(c(1:100),50),
           Internet =sample(c(1:100),50))

str(dt)
mean(dt$Births)

或者即使我将数据设为num仍然有效:

dt<-data.frame(Births =as.numeric( sample(c(1:100),50)),
           Internet =as.numeric(sample(c(1:100),50)))

str(dt)
mean(dt$Births)

如果您希望传递数据框并一次性获得常规信息,则可以使用summary函数:

summary(iris)

答案 1 :(得分:0)

两个选项,如果确实所有列均为数字,则第一个起作用,第二个仅对数字列进行汇总:

dt %>% dplyr::summarise_all(mean)
dt %>% dplyr::summarise_if(is.numeric, mean)


  Births Internet
1  47.86    47.52