by和summary有什么区别?

时间:2020-10-07 14:30:19

标签: r variables output mean summary

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

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

平均2.473

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

平均2.573

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在不知道您的数据的情况下:by将函数(summary)应用于矢量(wcomp$numbf.y),并被组(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