在我分配的练习中,它要求为数据框的每一列提供基本的描述性统计数据。我的表名为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
答案 0 :(得分:3)
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.frames基于如下列表的事实: / p>
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)))