1.1 题目如下
(1)基础数据录入:
> income<-c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户")
> year2016<-c(3750,7338,10508,14823,28225)
> year2017<-c(4647,9330,13506,19404,36957)
> year2018<-c(6545,12674,18277,26044,49175)
> year2019<-c(8004,17024,24832,35576,67132)
> year2020<-c(10422,21636,31685,45639,85541)
错误1:
> table1<-data.frame(收入户等级=income,2016年=year2016,2017年=year2017,2018年=year2018,2019年=year2019,2020年=year2020)
Error: unexpected symbol in "table1<-data.frame(收入户等级=income,2016年"
原因是系统无法识别数字字符,于是我给带有数字的字符加上引号就出现了错误2:
> table1<-data.frame(收入户等级=income,"2016年"=year2016,"2017年"=year2017,"2018年"=year2018,"2019年"=year2019,"2020年"=year2020)
> table1
收入户等级 X2016年 X2017年 X2018年 X2019年 X2020年
1 低收入户 3750 4647 6545 8004 10422
2 中等偏下户 7338 9330 12674 17024 21636
3 中等收入户 10508 13506 18277 24832 31685
4 中等偏上户 14823 19404 26044 35576 45639
5 高收入户 28225 36957 49175 67132 85541
每个数字前面都自动添加了X
解决方式:在末尾加上check.names=F
> table1<-data.frame(收入户等级=income,"2016年"=year2016,"2017年"=year2017,"2018年"=year2018,"2019年"=year2019,"2020年"=year2020,check.names=F)
> table1
收入户等级 2016年 2017年 2018年 2019年 2020年
1 低收入户 3750 4647 6545 8004 10422
2 中等偏下户 7338 9330 12674 17024 21636
3 中等收入户 10508 13506 18277 24832 31685
4 中等偏上户 14823 19404 26044 35576 45639
5 高收入户 28225 36957 49175 67132 85541
然后保存为csv格式(保存路径要用/而不是\),完整代码为:
>income<-c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户")
> year2016<-c(3750,7338,10508,14823,28225)
> year2017<-c(4647,9330,13506,19404,36957)
> year2018<-c(6545,12674,18277,26044,49175)
> year2019<-c(8004,17024,24832,35576,67132)
> year2020<-c(10422,21636,31685,45639,85541)
> table1<-data.frame(收入户等级=income,"2016年"=year2016,"2017年"=year2017,"2018年"=year2018,"2019年"=year2019,"2020年"=year2020,check.names=F)
> table1
收入户等级 2016年 2017年 2018年 2019年 2020年
1 低收入户 3750 4647 6545 8004 10422
2 中等偏下户 7338 9330 12674 17024 21636
3 中等收入户 10508 13506 18277 24832 31685
4 中等偏上户 14823 19404 26044 35576 45639
5 高收入户 28225 36957 49175 67132 85541
>write.csv(table1,file="D:/作业/统计学R/table.csv")
(2)相关理解见注释,完整代码为:
> mat<-as.matrix(table1[,2:6]) #将table1中的第2到第6列转换成矩阵mat
> rownames(mat)=table1[,1] #矩阵的行名为table1第1列的名称
> mat
2016年 2017年 2018年 2019年 2020年
低收入户 3750 4647 6545 8004 10422
中等偏下户 7338 9330 12674 17024 21636
中等收入户 10508 13506 18277 24832 31685
中等偏上户 14823 19404 26044 35576 45639
高收入户 28225 36957 49175 67132 85541
(3)相关理解见注释,完整代码为:
>install.packages("reshape2") #下载reshape2包
> library(reshape2) #加载reshape2包
> tab.long<-melt(table1,id.vars="收入户等级",variable.name="年份",value.name="收入")
#转换成长格式,id.vars为变量,variable.name为变量名,value.name为数值名
> tab.long
收入户等级 年份 收入
1 低收入户 2016年 3750
2 中等偏下户 2016年 7338
3 中等收入户 2016年 10508
4 中等偏上户 2016年 14823
5 高收入户 2016年 28225
6 低收入户 2017年 4647
7 中等偏下户 2017年 9330
8 中等收入户 2017年 13506
9 中等偏上户 2017年 19404
10 高收入户 2017年 36957
11 低收入户 2018年 6545
12 中等偏下户 2018年 12674
13 中等收入户 2018年 18277
14 中等偏上户 2018年 26044
15 高收入户 2018年 49175
16 低收入户 2019年 8004
17 中等偏下户 2019年 17024
18 中等收入户 2019年 24832
19 中等偏上户 2019年 35576
20 高收入户 2019年 67132
21 低收入户 2020年 10422
22 中等偏下户 2020年 21636
23 中等收入户 2020年 31685
24 中等偏上户 2020年 45639
25 高收入户 2020年 85541
1.2 题目如下
完整代码如下:
> set.seed(123) #设定随机数种子
> mat<-matrix(rnorm(n=20,mean=0,sd=1),nrow=4,ncol=5,byrow=TRUE)
#rnorm()生成20个标准正态分布随机数,n代表数字个数,mean代表均值,sd代表标准差,matrix生成矩阵
> mat
[,1] [,2] [,3] [,4] [,5]
[1,] -0.5604756 -0.2301775 1.5587083 0.07050839 0.1292877
[2,] 1.7150650 0.4609162 -1.2650612 -0.68685285 -0.4456620
[3,] 1.2240818 0.3598138 0.4007715 0.11068272 -0.5558411
[4,] 1.7869131 0.4978505 -1.9666172 0.70135590 -0.4727914
> set.seed(123)
> mat<-matrix(rnorm(n=20,mean=0,sd=1),nrow=5,ncol=4,byrow=TRUE)
> mat
[,1] [,2] [,3] [,4]
[1,] -0.5604756 -0.2301775 1.5587083 0.07050839
[2,] 0.1292877 1.7150650 0.4609162 -1.26506123
[3,] -0.6868529 -0.4456620 1.2240818 0.35981383
[4,] 0.4007715 0.1106827 -0.5558411 1.78691314
[5,] 0.4978505 -1.9666172 0.7013559 -0.47279141
1.3 题目如下
(1)相关理解见注释,完整代码为:
> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv") #读取csv数据
> attach(Titanic)
> table2<-table(Sex,Survived) #生成二维列联表
> table2
Survived
Sex No Yes
Female 126 344
Male 1364 367
> addmargins(table2) #加上边际和
Survived
Sex No Yes Sum
Female 126 344 470
Male 1364 367 1731
Sum 1490 711 2201
(2)相关理解见注释,完整代码为:
> table3<-ftable(Titanic,row.vars=c("Class","Sex","Age"),col.vars="Survived")
#生成多维列联表,row.vars为行变量,col.vars为列变量
> table3
Survived No Yes
Class Sex Age
1st Female Adult 4 140
Child 0 1
Male Adult 118 57
Child 0 5
2nd Female Adult 13 80
Child 0 13
Male Adult 154 14
Child 0 11
3rd Female Adult 89 76
Child 17 14
Male Adult 387 75
Child 35 13
Crew Female Adult 3 20
Child 0 0
Male Adult 670 192
Child 0 0
(3)相关理解见注释,完整代码为:
> df<-as.data.frame(table3) #将列联表转化成带有类别频数的数据框
> df
Class Sex Age Survived Freq
1 1st Female Adult No 4
2 2nd Female Adult No 13
3 3rd Female Adult No 89
4 Crew Female Adult No 3
5 1st Male Adult No 118
6 2nd Male Adult No 154
7 3rd Male Adult No 387
8 Crew Male Adult No 670
9 1st Female Child No 0
10 2nd Female Child No 0
11 3rd Female Child No 17
12 Crew Female Child No 0
13 1st Male Child No 0
14 2nd Male Child No 0
15 3rd Male Child No 35
16 Crew Male Child No 0
17 1st Female Adult Yes 140
18 2nd Female Adult Yes 80
19 3rd Female Adult Yes 76
20 Crew Female Adult Yes 20
21 1st Male Adult Yes 57
22 2nd Male Adult Yes 14
23 3rd Male Adult Yes 75
24 Crew Male Adult Yes 192
25 1st Female Child Yes 1
26 2nd Female Child Yes 13
27 3rd Female Child Yes 14
28 Crew Female Child Yes 0
29 1st Male Child Yes 5
30 2nd Male Child Yes 11
31 3rd Male Child Yes 13
32 Crew Male Child Yes 0
1.4 题目如下
完整代码如下:
> library(DescTools) #加载频数分布表所在包
> set.seed(123) #设置随机数种子
> table4<-Freq(rnorm(n=1000,mean=200,sd=10),breaks=c(170,180,190,200,210,220,230,240),right=FALSE)
#生成频数分布表,breaks设置组距,不含上限值
> table4
level freq perc cumfreq cumperc
1 [170,180) 19 1.9% 19 1.9%
2 [180,190) 146 14.6% 165 16.5%
3 [190,200) 330 33.0% 495 49.5%
4 [200,210) 348 34.8% 843 84.3%
5 [210,220) 129 12.9% 972 97.2%
6 [220,230) 27 2.7% 999 99.9%
7 [230,240] 1 0.1% 1'000 100.0%
呼哈~结束啦!贴一个带有答案的网站(只有效果图没有代码,代码全部是我自己比对教材做出来的):《统计学—基于R》(第4版)—各章习题答案人大版 - 道客巴巴 (doc88.com)
下次见。