• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      未分类

      • 首页
      • 博客
      • 未分类
      • R Tips :split 函数

      R Tips :split 函数

      • 发布者 weinfoadmin
      • 分类 未分类, 老俊俊的生信笔记
      • 日期 2021年9月10日
      • 评论 0评论

      感谢老俊俊的大力支持。我们会每日跟新,欢迎您关注老俊俊的生信笔记。

      R Tips :split 函数

      介绍

      split 函数是 R base 环境里的函数,注意不是字符串切割那个函数。之前总会把 strsplit 函数和这个搞混,今天来学习一下这个函数。该函数根据向量或因子来对数据或者向量进行分组,首先我们看看帮助文档:

      ?split()
      ######################
      Description
      split divides the data in the vector x into the groups defined by f. The replacement forms replace values corresponding to such a division. unsplit reverses the effect of split.

      Usage
      split(x, f, drop = FALSE, ...)
      ## Default S3 method:
      split(x, f, drop = FALSE, sep = ".", lex.order = FALSE, ...)

      split(x, f, drop = FALSE, ...) <- value
      unsplit(value, f, drop = FALSE)

      参数介绍:

      1、x: 需要被分组的向量或者数据框
      2、f: 定义分组的因子或 list
      3、drop: 逻辑值,如果 f 中的因子没被用到就丢弃掉
      4、value: 一个用于储存 split 函数分组结果的 list
      5、sep: 字符串,用于 f 中有多个因子 list 类型的 list 名字的连接符号

      使用

      # 加载测试数据
      data("mtcars")
      head(mtcars)
                         mpg cyl disp  hp drat    wt  qsec vs am gear carb
      Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
      Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
      Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
      Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
      Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
      Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

      # 查看cyl列有哪几种类型
      table(mtcars$cyl)
       4  6  8
      11  7 14
      # 根据cyl列切分,返回的是一个list,每个list名字为分组水平
      $`4`
                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
      Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
      Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
      Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
      ...

      $`6`
                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
      Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
      Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
      ...

      $`8`
                           mpg cyl  disp  hp drat    wt  qsec vs am gear carb
      Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
      Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
      ...

      # 根据cyl和gear列切分,以下划线'_'连接
      split(mtcars,list(mtcars$cyl,mtcars$gear),sep = '_')
      $`4_3`
                     mpg cyl  disp hp drat    wt  qsec vs am gear carb
      Toyota Corona 21.5   4 120.1 97  3.7 2.465 20.01  1  0    3    1

      $`6_3`
                      mpg cyl disp  hp drat    wt  qsec vs am gear carb
      Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
      Valiant        18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

      $`8_3`
                           mpg cyl  disp  hp drat    wt  qsec vs am gear carb
      Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
      Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
      ...

      $`4_4`
                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
      Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
      Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
      ...

      $`6_4`
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
      Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
      Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
      ...

      $`8_4`
       [1] mpg  cyl  disp hp   drat wt   qsec vs   am   gear carb
      <0 行> (或0-长度的row.names)

      $`4_5`
                     mpg cyl  disp  hp drat    wt qsec vs am gear carb
      Porsche 914-2 26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
      Lotus Europa  30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2

      $`6_5`
                    mpg cyl disp  hp drat   wt qsec vs am gear carb
      Ferrari Dino 19.7   6  145 175 3.62 2.77 15.5  0  1    5    6

      $`8_5`
                      mpg cyl disp  hp drat   wt qsec vs am gear carb
      Ford Pantera L 15.8   8  351 264 4.22 3.17 14.5  0  1    5    4
      Maserati Bora  15.0   8  301 335 3.54 3.57 14.6  0  1    5    8

      对向量分割,后面可以接 map、lapply、sapply 等函数进行进一步操作:

      # 对cyl列分组,获得mpg的值
      split(mtcars$mpg,mtcars$cyl)
      $`4`
       [1] 22.8 24.4 22.8 32.4 30.4 33.9 21.5 27.3 26.0 30.4 21.4

      $`6`
      [1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7

      $`8`
       [1] 18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 13.3 19.2 15.8 15.0

      # 对4、6、8三个水平的mpg计算平均值
      sapply(split(mtcars$mpg,mtcars$cyl), mean)
             4        6        8
      26.66364 19.74286 15.10000
      # 计算最小值
      lapply(split(mtcars$mpg,mtcars$cyl), min)
      $`4`
      [1] 21.4

      $`6`
      [1] 17.8

      $`8`
      [1] 10.4
      # 计算标准差
      map_dbl(split(mtcars$mpg,mtcars$cyl), sd)
             4        6        8
      4.509828 1.453567 2.560048

      # 两个因子分组
      split(mtcars$mpg,list(mtcars$cyl,mtcars$gear),sep = '_')
      $`4_3`
      [1] 21.5

      $`6_3`
      [1] 21.4 18.1

      $`8_3`
       [1] 18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 13.3 19.2

      $`4_4`
      [1] 22.8 24.4 22.8 32.4 30.4 33.9 27.3 21.4

      $`6_4`
      [1] 21.0 21.0 19.2 17.8

      $`8_4`
      numeric(0)

      $`4_5`
      [1] 26.0 30.4

      $`6_5`
      [1] 19.7

      $`8_5`
      [1] 15.8 15.0
      # 计算均值,NaN是那个类型的数据不存在
      sapply(split(mtcars$mpg,list(mtcars$cyl,mtcars$gear)), mean)
         4.3    6.3    8.3    4.4    6.4    8.4    4.5    6.5    8.5
      21.500 19.750 15.050 26.925 19.750    NaN 28.200 19.700 15.400

      感觉这样的话其实 dplyr 完全可以干这个事情,会更加方便一些:

      library(dplyr)
      # 对mpg按cyl和gear分组计算均值
      mtcars %>% group_by(cyl,gear) %>%
              summarise(mean_mpg = mean(mpg))
      `summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument.
      # A tibble: 8 x 3
      # Groups:   cyl [3]
          cyl  gear mean_mpg
        <dbl> <dbl>    <dbl>
      1     4     3     21.5
      2     4     4     26.9
      3     4     5     28.2
      4     6     3     19.8
      5     6     4     19.8
      6     6     5     19.7
      7     8     3     15.0
      8     8     5     15.4

      # 对mpg、disp按cyl和gear分组计算均值、标准差和最小值
      mtcars %>% group_by(cyl,gear) %>%
              summarise(mean_mpg = mean(mpg),sd_mpg = sd(mpg),min_disp = min(disp))
      `summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument.
      # A tibble: 8 x 5
      # Groups:   cyl [3]
          cyl  gear mean_mpg sd_mpg min_disp
        <dbl> <dbl>    <dbl>  <dbl>    <dbl>
      1     4     3     21.5 NA        120.
      2     4     4     26.9  4.81      71.1
      3     4     5     28.2  3.11      95.1
      4     6     3     19.8  2.33     225
      5     6     4     19.8  1.55     160
      6     6     5     19.7 NA        145
      7     8     3     15.0  2.77     276.
      8     8     5     15.4  0.566    301

      – END –

      欢迎小伙伴留言评论!

      点击我留言!

      今天的分享就到这里了,敬请期待下一篇!

      最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!

      如果觉得对您帮助很大,打赏一下吧!

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      画个CNS级别火山图!
      2021年9月10日

      下一篇文章

      什么? R 版 Hisat2
      2021年9月10日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 2022

      留言 取消回复

      要发表评论,您必须先登录。

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?