r - 使用 tapply 函数生成平均值时出错
问题描述
嗨,我试图从 iris 数据集中生成每个物种的 Petal.Width 和 Sepal.Width 的平均值。
但是我遇到了错误。
代码
tapply(iris$Species, iris$Petal.Width, mean)
结果为 0.1 0.2 0.3 0.4 0.5 0.6 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2 NA NA NA警告(使用 warnings() 来查看它们)
tapply(iris$Species, iris$Sepal.Length , mean)
这导致 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6 6.1 6.2 6.3 6.4 6.5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 6.7 6.8 6.9 7 7.1 7.2 7.3 7.4 7.6 7.7 7.9 NA NA NA NA NA NA NA NA NA NA NA NA 有 35 个警告(使用 warnings() 来查看)
解决方案
你的论点是错误的方式......
tapply(iris$Petal.Width, iris$Species, mean)
# setosa versicolor virginica
# 0.246 1.326 2.026
tapply(iris$Sepal.Length, iris$Species, mean)
# setosa versicolor virginica
# 5.006 5.936 6.588
您是否考虑过一种data.table
方法?
library(data.table)
iris <- data.table(iris)
# Calculate the mean for all columns by Species ...
iris[, lapply(.SD, mean, na.rm = TRUE), Species]
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1: setosa 5.006 3.428 1.462 0.246
# 2: versicolor 5.936 2.770 4.260 1.326
# 3: virginica 6.588 2.974 5.552 2.026
推荐阅读
- python - 使用 tweepy 从用户时间线中获取重复的推文
- numpy - 在 cnn 中匹配通道形状的正确方法是什么?转置与重塑
- powershell - 如何按注册表中属性子属性的值过滤结果
- docker - Selenium Hub - 创建可重用的配置文件
- sapb1 - 如何在 SAP B1 SDK 中添加服务调用?
- c++ - 在嵌套类中调用 `operator[]` 后保留类类型
- reactjs - Reactjs Material:如何将 props 传递给 reactjs 材质对话框
- javascript - typeError: undefined is not an object (评估 'item.phoneNumbers[0]')
- python - 在熊猫中使用 lstrip 时删除多余的字符
- java - 这两个 compareTo 方法有什么区别?