在分配给我的练习中,它要求数据框的每一列的基本描述性统计数据。 我的表被称为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)))
您可以包含所需的任何统计信息。
这是我的解决方案。您可以只使用sapply
和summary
,后者提供一些统计位置度量(平均值、中位数等),第一个将函数应用于其参数的每个元素,在这种情况下,如果您有数据框,它将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