编程新手 - 单列平均值



在分配给我的练习中,它要求数据框的每一列的基本描述性统计数据。 我的表被称为SATGPA20R,我尝试了attach(SATGPA20R)但没有得到任何结果。 如何计算单列的数据?

以下是我正在使用的数据:

ID  SEX State   SATV    SATM    GPA
2   1   1   1   590 590 3.20
3   2   1   1   670 660 3.03
4   3   1   1   540 520 2.69
5   4   1   2   620 600 3.06
6   5   1   3   610 510 3.03
7   6   1   1   560 500 3.03
8   7   1   3   480 590 3.48
9   8   1   2   620 560 3.62
10  9   1   1   510 610 3.21
11  10  1   1   630 530 3.73
12  11  1   2   580 530 3.51
13  12  1   2   490 560 3.04
14  13  2   2   620 540 3.02
15  14  2   3   520 550 3.01
16  15  2   3   620 620 3.47
17  16  2   2   480 530 2.90
18  17  2   1   500 630 2.87
19  18  2   1   640 560 2.38
20  19  2   1   390 430 2.41
21  20  2   1   540 520 2.56

attach使 data.frame 中的字段可用作普通变量,如下所示:

# make a simple data.frame
df <- data.frame(gpa = 1 + runif(50)*3)
# attach it to the search path
attach(df)
# use the field names as orinary variables
sd(gpa)
#> [1] 0.857903
mean(gpa)
#> [1] 2.686774

虽然它确实为您节省了一些键入来附加 data.frame 的时间,但它会混淆您的代码,从而难以弄清楚变量的定义位置。 这在实践中通常不是一个很好的权衡,所以我会说远离它,转而使用更具描述性的代码,例如:

# access the fields via the $ and [ operators
sd(df$gpa)
#> [1] 0.857903
mean(df[,'gpa'])
#> [1] 2.686774

也就是说,如果你想计算 data.frame 的每一列的汇总统计数据,我喜欢使用lapply()它利用了 data.frame 基于如下列表的事实:

lapply(df, # the data.frame to be summarized
sd) # the summary statistic. 

如果汇总统计量是原子值(如数字)或恒定长度向量(如 cryo111 的示例所示),则在可能的情况下,使用sapply()将返回向量或矩阵会很方便:

sapply(df, # the data.frame to be summarized
sd) # the summary statistic. 
sapply(df,function(x) list(mean=mean(x),sd=sd(x),var=var(x)))

如果你的数据在data.frame你可以使用类似的东西

lapply(df,function(x) list(mean=mean(x),sd=sd(x),var=var(x)))

您可以包含所需的任何统计信息。

这是我的解决方案。您可以只使用sapplysummary,后者提供一些统计位置度量(平均值、中位数等),第一个将函数应用于其参数的每个元素,在这种情况下,如果您有数据框,它将summary函数应用于每一列。

# generates a data frame
df <- data.frame( int = 1:10, random = rnorm(10) )
sapply(df, summary)
int    random
Min.     1.00 -1.243000
1st Qu.  3.25 -0.642900
Median   5.50 -0.019500
Mean     5.50 -0.005856
3rd Qu.  7.75  0.695200
Max.    10.00  0.987600

最新更新