• 实验四 基本数据管理(一)


    实验4 基本数据管理(一)

    实验目的:

    • 掌握产生不同分布随机数的方法;
    • 区分多种排序函数的使用场景以及返回值的含义;
    • 掌握条形图的绘制方法。

    实验内容:

    1.)随机产生一个包含10个元素的整型向量x,将其逆序赋值给向量y。

    > x<-trunc(runif(10,10,20))
    > x
     [1] 19 18 10 11 11 18 19 15 15 15
    > y<-x[length(x):1]
    > y
     [1] 15 15 15 19 18 11 11 10 18 19
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image-20220910232840765

    2.)用函数data.frame()创建一个数据框,第1列名为letters,包含a-h这8个字母,第2列名为numbers,包含1-8数字。

    > df<-data.frame(letters=letters[1:8],numbers=c(1:8))
    > df
      letters numbers
    1       a       1
    2       b       2
    3       c       3
    4       d       4
    5       e       5
    6       f       6
    7       g       7
    8       h       8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    image-20220910233217825

    3.) 生成一个列表,包含26个字母,数字0-9,和因子1-3

    > ls<-list(letters,0:9,factor(1:3))
    > ls
    [[1]]
     [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
    
    [[2]]
     [1] 0 1 2 3 4 5 6 7 8 9
    
    [[3]]
    [1] 1 2 3
    Levels: 1 2 3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    image-20220910233441718

    4.) 生成如下矩阵

    image-20220910233537002

    > x<-matrix(1:40,10,4,byrow = TRUE)
    > rownames(x)<-LETTERS[1:10]
    > colnames(x)<-paste("sub",1:4,sep = "")
    > x
      sub1 sub2 sub3 sub4
    A    1    2    3    4
    B    5    6    7    8
    C    9   10   11   12
    D   13   14   15   16
    E   17   18   19   20
    F   21   22   23   24
    G   25   26   27   28
    H   29   30   31   32
    I   33   34   35   36
    J   37   38   39   40
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    image-20220911100115289

    5.) 加载R的基础数据集iris,用write.csv()函数把数据集保存到一个csv文件中。

    > write.csv(iris,file = "E:/R语言/作业/iris.csv")
    
    • 1

    image-20220911101034791

    6.) 对数据集mtcars中的汽车重量wt按照从高到低的顺序进行排序。

    > sort(mtcars$wt,decreasing = TRUE)
     [1] 5.424 5.345 5.250 4.070 3.845 3.840 3.780 3.730 3.570 3.570 3.520 3.460 3.440 3.440 3.440 3.435 3.215
    [18] 3.190 3.170 3.150 2.875 2.780 2.770 2.620 2.465 2.320 2.200 2.140 1.935 1.835 1.615 1.513
    
    
    • 1
    • 2
    • 3
    • 4

    image-20220911101550860

    7.) 随机生成10个50以内的自然数,使用order函数获取元素的索引在排序后的位置。

    > x<-trunc(runif(10,0,50))
    > x
     [1] 39 32 37  8 46  5 15 33 28 12
    > order(x)
     [1]  6  4 10  7  9  2  8  3  1  5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image-20220911101906387

    8.) 设定随机数种子,随机产生10个20以内的自然数,使用rank函数求其秩排序值。

    > set.seed(1234)
    > x<-trunc(runif(10,0,20))
    > x
     [1]  2 12 12 12 17 12  0  4 13 10
    > rank(x,ties.method ="average" )
     [1]  2.0  6.5  6.5  6.5 10.0  6.5  1.0  3.0  9.0  4.0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220911102942761

    9.) 加载R的基础数据集iris,用write.csv()把数据集保存到一个CSV文件中。

    a) 使用excel修改文件,把某些属性改为NA。

    b) 导入刚才保存的文件到一个新的数据框newdata1

    c) 统计新数据框中缺失值的个数

    d) 对含有缺失值的行进行处理后,形成另外新的数据框newdata2(即不再包含缺失值)

    e) 对newdata1中的缺失值赋值为0,形成新的数据框newdata3

    > newdata1<-read.csv("E:/R语言/作业/iris - 副本.csv")
    > num<-sum(is.na(newdata1))
    > newdata2<-na.omit(newdata1)
    > newdata1[is.na(newdata1)]<-0
    > newdata3<-newdata1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220911103738949

    image-20220911104027217

    image-20220911105502208

    image-20220911110142616

    10.) 综合实验:(基本数据管理)

    a. 首先创建如下图所示的数据框worker

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HARILpcs-1663482602887)(C:/Users/THUNOE~1/AppData/Local/Temp/ksohtml10408/wps1.jpg)]

    其中:

    • id采用paste函数实现字符串的连接生成
    • age采用【25,60】之间的服从均匀分布的随机整数
    • salary1采用【4000,8000】之间的服从均匀分布的随机整数
    • salary2采用【1500,3000】之间的服从均匀分布的随机整数

    代码实现:

    > id<-paste("BH",1:5,sep = "")
    > province<-c("Hebei","Henan","Shandong","Shanxi","Guizhou")
    > gender<-c("F","M","F","M","F")
    > age<-trunc(runif(5,25,60))
    > salary1<-trunc(runif(5,4000,8000))
    > salary2<-trunc(runif(5,1500,3000))
    > worker<-data.frame(id,province,gender,age,salary1,salary2)
    > worker
       id province gender age salary1 salary2
    1 BH1    Hebei      F  27    5680    2351
    2 BH2    Henan      M  25    7652    1834
    3 BH3 Shandong      F  29    4152    1722
    4 BH4   Shanxi      M  36    4481    2191
    5 BH5  Guizhou      F  26    5153    1823
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    image-20220911111501856

    b. 创建新变量

    通过创建新变量方法,得到如下新的数据框(增加一列sum)

    image-20220911112341651

    > worker$sum<-worker$salary1+worker$salary2
    > worker
       id province gender age salary1 salary2  sum
    1 BH1    Hebei      F  27    5680    2351 8031
    2 BH2    Henan      M  25    7652    1834 9486
    3 BH3 Shandong      F  29    4152    1722 5874
    4 BH4   Shanxi      M  36    4481    2191 6672
    5 BH5  Guizhou      F  26    5153    1823 6976
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20220911112525844

    c. 变量的重编码

    对年龄字段进行重编码,将age中年龄<30的重编码为Young,年龄>=30 and 年龄<40的重编码为Middle,年龄>=40的重编码为elder,结果如下图所示

    image-20220911112611397

    > x<-worker$age
    > worker$age<-ifelse(x<30,"young",ifelse(x>=30 & x<40,"middle","elder"))
    > worker
       id province gender    age salary1 salary2  sum
    1 BH1    Hebei      F  young    5680    2351 8031
    2 BH2    Henan      M  young    7652    1834 9486
    3 BH3 Shandong      F  young    4152    1722 5874
    4 BH4   Shanxi      M middle    4481    2191 6672
    5 BH5  Guizhou      F  young    5153    1823 6976
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    image-20220911114150797

    d. 数据排序,可以使用order()函数对数据框进行排序,默认为升序,在排序变量前加一个减号,可以降序排列

    按照salary1变量对worker升序排列,结果放在newdata1中

    > newdata1<-worker[order(worker$salary1),]
    > newdata1
       id province gender    age salary1 salary2  sum
    3 BH3 Shandong      F  young    4152    1722 5874
    4 BH4   Shanxi      M middle    4481    2191 6672
    5 BH5  Guizhou      F  young    5153    1823 6976
    1 BH1    Hebei      F  young    5680    2351 8031
    2 BH2    Henan      M  young    7652    1834 9486
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220911114543519

    按照salary2变量对worker降序排列,结果放在newdata2中

    > newdata2<-worker[order(-worker$salary2),]
    > newdata2
       id province gender    age salary1 salary2  sum
    1 BH1    Hebei      F  young    5680    2351 8031
    4 BH4   Shanxi      M middle    4481    2191 6672
    2 BH2    Henan      M  young    7652    1834 9486
    5 BH5  Guizhou      F  young    5153    1823 6976
    3 BH3 Shandong      F  young    4152    1722 5874
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220911114752577

    e. 从数据框中选取特定子集

    使用subset()提取出女性数据,结果放在newdata3中

    > newdata3<-subset(worker,worker$gender=="F")
    > newdata3
       id province gender   age salary1 salary2  sum
    1 BH1    Hebei      F young    5680    2351 8031
    3 BH3 Shandong      F young    4152    1722 5874
    5 BH5  Guizhou      F young    5153    1823 6976
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220911115017920

    11.)完成11.1.5气泡图的代码实现,将图形截图,并给出结论。

    attach(mtcars)
    r<-sqrt(disp/pi)
    symbols(wt,mpg,circles = r,inches = 0.30,
            fg="white",bg="lightblue",
            main = "Bubble Plot with point size proportional to displacement",
            ylab = "Miles Per Gallon",
            xlab = "Weight of Car(1bs/1000)")
    text(wt,mpg,rownames(mtcars),cex=0.6)
    detach(mtcars)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    image-20220911120151421

    随着每加仑汽油所行驶里程的增加,车重和发动机排量都逐渐减少。

    12.) 绘制如下分组条形图:(附:matlab代码)(选做)

    %paper8 ranking of eight methods on the best values, the mean values and
    %the worst values
    x1=[1.91	0.41	0.98	3.97	2.70	2.72]; % AE of best values
    x2=[3.08	0.90	1.23	5.63	4.81	4.75 ]; % AE of mean values
    x3=[4.81	1.75	1.48	7.49	8.29	8.09]; % AE of worst values
    y=[x1',x2',x3'];
    p=bar(y');
    set(gca,'xticklabel',{'AE of best profit','AE of mean profit','AE of worst profit'});
    ylabel('AE value (Average Error)');
    xlabel('The performance comparison of six methods ');
    legend(p(1:3),'MS','SLMS','MMVO','location','best');
    ah=axes('position',get(gca,'position'),...
               'visible','off');
    legend(ah,p(4:6),'BGSA','BHTPSO','BHTPSO-QI','location','best');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    x1<-c(1.91,0.41,0.98,3.97,2.70,2.72)#AE of best values
    x2<-c(3.08,0.90,1.23,5.63,4.81,4.75)
    x3<-c(4.81,1.75,1.48,7.49,8.29,8.09)
    y<-cbind(x1,x2,x3)
    colnames(y)<-c('AE of best profit','AE of mean profit','AE of worst profit')
    rownames(y)<-c('MS','SLMS','MMVO','BGSA','BHTPSO','BHTPSO-QI')
    barplot(y,
            xlab = "The performance comparison of six methods",
            ylab = "AE value (Average Error)",
            col = c("#332b81","#0a75df","#07a5c0","#7ac078","#efba41","#fcf909"),
            legend.text = rownames(y),
            beside = TRUE)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    image-20220911150940717

  • 相关阅读:
    盘点 Spring Boot 解决跨域请求的几种方法
    Android 10.0 Launcher3定制化之动态日历图标功能实现
    C#Socket
    浅谈async-await
    VideoMAE 论文阅读
    vue 实现自定义主题切换+日夜切换
    nginx(第二篇)
    Web基础与http协议
    mac卸载软件工具CleanMyMac X4.15永久版下载
    离线升级esp32开发板升级包esp32-2.0.14(最新版已经3.0alpha了)
  • 原文地址:https://blog.csdn.net/W_chuanqi/article/details/126917453