by 和 summary 和有什么不一样?

What is the difference between by and summary?

也许有人可以回答我的问题。 下面的写法有什么区别?就我而言,我很想知道均值,但得到的数字不同。

> by(wcomp$numbf.y, wcomp$partw2, summary, na.rm = TRUE)

平均 2.473

summary(wcomp$numbf.y, wcomp$partw2, na.rm = TRUE)

平均 2.573

感谢您的帮助

在不知道您的数据的情况下:by 将函数 (summary) 应用于向量 (wcomp$numbf.y) by 一组 (wcomp$partw2).

summary 创建数据摘要(有点忽略第二个参数)。

另请参阅此 MWE(我使用了 mtcars 数据集并将一些值设置为 NA:


df <- mtcars
df[c(1, 5), c("cyl", "mpg")] <- NA
head(df)
#>                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4           NA  NA  160 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#> Hornet Sportabout   NA  NA  360 175 3.15 3.440 17.02  0  0    3    2
#> Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

by(df$mpg, df$cyl, summary)
#> df$cyl: 4
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   21.40   22.80   26.00   26.66   30.40   33.90 
#> ------------------------------------------------------------ 
#> df$cyl: 6
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   17.80   18.38   19.45   19.53   20.68   21.40 
#> ------------------------------------------------------------ 
#> df$cyl: 8
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   10.40   14.30   15.20   14.82   15.80   19.20

summary(df$mpg, df$cyl)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#>   10.40   15.28   19.20   20.11   22.80   33.90       2
summary(df$mpg)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#>   10.40   15.28   19.20   20.11   22.80   33.90       2
summary(df$cyl)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#>   4.000   4.000   6.000   6.133   8.000   8.000       2

reprex package (v0.3.0)

于 2020-10-07 创建

我们看到平均值都是不同的,因为我们正在计算不同的均值:对所有 obs 一次(在摘要调用中),当使用 by 调用时,我们计算每组的摘要(圆柱体).

我们还看到 summary() 的第二个参数被忽略了。

这是否回答了您的问题?

如果您只对均值感兴趣,请尝试

mean(df$mpg, na.rm = TRUE) #< na.rm needed here!
#> [1] 20.10667

by(df$mpg, df$cyl, mean)
#> df$cyl: 4
#> [1] 26.66364
#> ------------------------------------------------------ 
#> df$cyl: 6
#> [1] 19.53333
#> ------------------------------------------------------ 
#> df$cyl: 8
#> [1] 14.82308