> names<-c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户")
> a<-c(3750,7338,10508,14823,28225)
> b<-c(4647,9330,13506,19404,36957)
> c<-c(6545,12674,18277,26044,49175)
> d<-c(8004,17024,24832,35576,67132)
> e<-c(10422,21636,31685,45639,85541)
> f<-data.frame("收入户等级"=names,"2016年"=a,"2017年"=b,"2018年"=c,"2019年"=d,"2020年"=e)
> f
> save(f,file="E:/代码/exerciae1.1.RData")
> matrix1_1<-matrix(cbind(a,b,c,d,e),ncol=5)
> dimnames(matrix1_1)<-list(c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户"),c("2016年","2017年","2018年","2019年","2020年"))
> matrix1_1
结果
> f
收入户等级 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
> matrix1_1
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
初学R语言,在解题过程中,对此题而言,发现如下几点注意事项:
1、在R语言中文件路径使用“/”或“\\”而不是“\”;
2、在read.csv查看文件或read.table查看表格的途中会出现列名前被加上X的现象,可以设置参数check.names=F,也正是因为参数check.names其默认值为T,数字前会默认加上X,使其看上去更像一个字符;
read.csv(file,check.names=F)
3、在上述代码中设置矩阵列名以及行名的时候使用的是
dimnames(matrix)=list(row.names,column.names,matrix.names)
其中,dimnames的右端必须为列表形式,列表中参数分别为行名以及列名;
其次,还能使用colnames和rownames分别设置
> rownames(matrix1_1)=c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户")
> colnames(matrix1_1)=c("2016年","2017年","2018年","2019年","2020年")
然而当使用f[a,b](f为数据框)表示取的行和列时应注意数据框中第一行从列名下一行开始计算
因此当上述代码写作
> rownames(matrix1_1)=f[,1]
也是可行的,而对于列名来说若写作
colnames(matrix1_1)=f[1,]
则会出现错误
Error in dimnames(x) <- dn :
length of 'dimnames' [2] not equal to array extent
原因是data_frame[:]设置列名或行名时没有与被设置的矩阵行数或列数相对应
当代码改成
> colnames(matrix1_1)=f[1,2:6]
则不出现错误,然而在逻辑上依旧不正确,因为这样所取的是数据框的第一行数据3750 4647 6545 8004 10422而非列名。