美文网首页RR语言与统计分析数据科学与R语言
R-数据处理基础篇-今天说说R语言中一些比较好用的小函数(番一)

R-数据处理基础篇-今天说说R语言中一些比较好用的小函数(番一)

作者: TroyShen | 来源:发表于2020-02-24 18:41 被阅读0次

    目录

    • 0.问题导入
    • 1.情景1:生成等差数列
    • 2.情景2:生成一个重复数列
    • 3.情景3:生成一个给定范围及大小的随机数列
    • 4.情景4:生成一个给定大小的正态分布的数列
    • 5.总结
    • 6.本篇所用的R-packages(没有的需要用install.packages()进行安装)
    • 7.致谢
    • 8.号外!TheWhoOPs平台与全国地研联公众号实现线上战略合作

    0. 问题导入

    在我们日常数据处理过程中,我们可能会遇到:

    情景1:生成等差数列。 举个栗子,比如,我们现在有一个12✖️12的矩阵,我们只需要筛选1,3,5,7,9列这种情景。
    情景2:生成一个重复数列。 比如1,1,1,1,2,2,2,2;或者1,2,3,4,1,2,3,4;
    情景3:生成一个给定范围及大小的随机数列。
    情景4:生成一个给定大小的正态分布的数列。

    今天我们先就以上几个情景列举几个R语言中好用的“小函数”,当然R语言中高效好用的小函数还有很多,今天是番一,我们之后会说不定啥时候再慢慢更下去哈~

    1. 情景1:生成等差数列

    在R语言中我们可以使用 seq() 这个函数进行生成等差数列,seq是sequence(序列)的缩写。函数结构如下:
    seq(start, end, step)

    • start: 起始的数字
    • end: 终止的数字
    • step: 步长

    来,我们单讲理论太枯燥了,上个栗子。
    需求:生成一个1至100,步长为5的数组。

    a = seq(1,100,5)
    a
     [1]  1  6 11 16 21 26 31 36 41
    [10] 46 51 56 61 66 71 76 81 86
    [19] 91 96
    

    2. 情景2:生成一个重复数列

    R语言中实现生成重复序列的小函数名称为rep,为repeat的缩写,特别好记。但是重复序列包含两种情况:
    情景2.1: 1,1,1,1,2,2,2,2
    情景2.2: 1,2,3,1,2,3
    那么,rep里的函数如何设置参数才能完成以上两种数列的生成目标呢?

    2.1 生成一个1,2,3,1,2,3类似的数列

    rep函数中b为需要复制的数列,2为复制的次数,各位可以根据自己的需求进行调整,只要是整数就好。

    b = c(1,2,3)
    b_rep = rep(b,2)
    b_rep
    [1] 1 2 3 1 2 3
    

    2.2 生成一个1,1,1,2,2,2,3,3,3的数列

    rep函数中c为需要复制的数列,eacg为数列中每个元素需要被连续复制的次数,各位可以根据自己的需求进行调整,只要是整数就好。

    c = c(1,2,3)
    c_rep = rep(c, each = 3)
    c_rep
    [1] 1 1 1 2 2 2 3 3 3
    

    3. 情景3:生成一个给定范围及大小的随机数列

    R语言中生成一个给定范围及大小的随机数列使用的是runif这个函数,这个我们之前有用过。这块再做一总结:
    runif(length, low_limit, high_limit)

    • length: 生成目标数组的长度
    • low_limit: 生成目标数组的下界
    • high_limit: 生成目标数组的上界

    给大家举个栗子,随机生成一个长度为20,下界为-10,上界为10的数组:

    d = runif(20, -10,10)
    d
    [1]  5.7400605  3.3614888
     [3]  6.0453652 -5.5522004
     [5] -6.2605447  8.3907748
     [7] -9.2792736  0.9046413
     [9]  4.2003175  4.8281140
    [11]  0.1434386  9.2114844
    [13] -4.1256033 -1.5977104
    [15]  6.4439050 -3.2071489
    [17] -8.0257372 -0.0238462
    [19]  0.5533586  5.9334686
    

    当然,由于runif() 函数为随机生成函数,每一次运行后生成的数列的值都是不一样的。

    4. 情景4:生成一个给定大小的正态分布的数列

    R语言中生成随机序列与生成正态数列的函数长得比较像:
    rnorm(n, mean = 0, sd = 1)
    其中:

    • n: 生成目标数列的长度
    • mean: 生成数列服从的正态分布的均值
    • sd:生成数列服从的正态分布的标准差

    实践以下,生成一个均值为10,标准差为2,长度为20的一个正态数组。那么问题来了,它跟runif长得很像,重复运行后输出的数列的结果会一致吗?我们来试下~

    e = rnorm(20, mean = 10, sd = 2)
    e
     [1]  9.353797 10.197699
     [3]  7.517421 12.750466
     [5]  5.330487  8.391239
     [7]  9.823847  7.564822
     [9] 10.309636 11.147118
    [11] 10.777385 12.225199
    [13]  8.971717 11.007456
    [15]  7.540044  6.638591
    [17]  6.936127 13.021617
    [19]  9.497354  9.592865
    e2 =rnorm(20, mean = 10, sd = 2) 
    [1] 10.713801  7.166222
     [3]  9.850157 10.894747
     [5]  9.497140  9.178578
     [7]  9.810915  9.693150
     [9]  9.476625 10.661446
    [11] 10.555617  9.410788
    [13] 11.541646  7.568738
    [15]  8.457985 15.385666
    [17] 12.119783 10.065007
    [19] 11.219981 11.942194
    print(sum(e-e2))
    [1] -16.6153
    

    由上,我们可以看出两个数列的差值的和不为0,即rnorm每重复运行一次,即使都服从正态分布,但生成的数列大小是不一样的。那么,下边我们来看下e和e2两个数列的分布情况(图1),可视化代码如下:

    df = data.frame(
      index = 1:20,
      e = e,
      e2 = e2
    )
    dfm = melt(df,'index')
    p1 = ggplot(data = dfm,
                aes(value,fill = variable))+
      geom_density(alpha = 0.5)+
      scale_fill_brewer(palette = 'Spectral')+
      geom_vline(aes(xintercept = 10),color = 'black',
                 size = 0.5,linetype = 'dashed')+
      theme_bw()
    
    png('plot1.png',
        height = 12,
        width = 15,
        units = 'cm',
        res = 800)
    print(p1)
    dev.off()
    
    图1 数组e与e2构成的分布比较图

    5. 总结

    本篇主要解决了以下问题:

    1. 如何在R中生成等差数列?
    2. 如何在R中生成重复数列?
    3. 如何在R中随机生成给定长度及大小数列?
    4. 如何在R中随机生成服从一定均值一定标准差正太分布的给定长度的数列?

    6. 本篇所用的R-packages(没有的需要用install.packages()进行安装)

    library(reshape2)
    library(ggplot2)
    

    7. 致谢

    首先,感谢大家的持续关注,小编会继续努力,持续更新下去的!

    大家如果觉得有帮助啊,还麻烦大家关注点赞,也可以扩散到朋友圈,多多引导朋友加入咱们这个技术平台, 代码共享推动科研进程, 多谢大家啦~

    大家如果在使用本代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~

    祝大家身体健康,多多保重!!


    Jersey 小编联系方式

    8. 号外!TheWhoOPs平台与全国地研联公众号实现线上战略合作

    这是与全国地研联联合推出的第六篇R语言技术推文-基础篇。

    从2020年2月10日起,TheWhoOPs技术公众号将与全国地理学研究生联合会公众号(简称地研联)公众号实现全面线上合作。

    合作内容主要包括为周一,三的R语言数据数据分析及可视化文章的线上共享发布及每周日的b站技术直播讲解点击进入直播间)。上周直播视频已上传,想回看的小伙伴可以在我b站账号下查看哈~

    如果大家觉得有帮助还劳烦多多帮忙宣传下哈!!

    相关文章

      网友评论

        本文标题:R-数据处理基础篇-今天说说R语言中一些比较好用的小函数(番一)

        本文链接:https://www.haomeiwen.com/subject/cdavqhtx.html