R数据框的统计函数失效

问题描述 投票:0回答:2

当使用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()与数据帧一起使用。

但是,我无法使其发挥作用。

r function dataframe
2个回答
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. 

因此,正如它解释它对vectors最好,同样基于this question,我认为你的书有点旧。获取您的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)

0
投票

两个选项,如果确实所有列都是数字,则首先工作,第二个只是汇总数字列:

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


  Births Internet
1  47.86    47.52
© www.soinside.com 2019 - 2024. All rights reserved.