• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

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

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

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

      老俊俊的生信笔记

      • 首页
      • 博客
      • 老俊俊的生信笔记
      • data.table 之 添加或删除列

      data.table 之 添加或删除列

      • 发布者 weinfoadmin
      • 分类 老俊俊的生信笔记
      • 日期 2022年1月16日
      测试开头


      要仰望,会平视,多俯看

      data.table 之 添加或删除列

      data.table 之 添加或删除列

      1引言

      这节主要介绍怎么在 data.table 里使用特殊操作符 := 添加或删除列操作,及结合 i 或 by 进行组合操作。

      2读取数据

      还是读取之前下载的测试数据:

      flights <- fread("flights14.csv")
      flights
      #         year month day dep_delay arr_delay carrier origin dest air_time distance hour
      #      1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9
      #      2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11
      #      3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19
      #      4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7
      #      5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13
      #     ---
      # 253312: 2014    10  31         1       -30      UA    LGA  IAH      201     1416   14
      # 253313: 2014    10  31        -5       -14      UA    EWR  IAH      189     1400    8
      # 253314: 2014    10  31        -8        16      MQ    LGA  RDU       83      431   11
      # 253315: 2014    10  31        -4        15      MQ    LGA  DTW       75      502   11
      # 253316: 2014    10  31        -5         1      MQ    LGA  SDF      110      659    8
      dim(flights)
      # [1] 253316     11

      3介绍

      构建测试 data.frame :

      DF = data.frame(ID = c("b","b","b","a","a","c"), a = 1:6, b = 7:12, c = 13:18)
      DF
      #   ID a  b  c
      # 1  b 1  7 13
      # 2  b 2  8 14
      # 3  b 3  9 15
      # 4  a 4 10 16
      # 5  a 5 11 17
      # 6  c 6 12 18

      操作列:

      # (1) -- replace entire column
      DF$c <- 18:13
      # or
      # (2) -- subassign in column 'c'
      DF$c[DF$ID == "b"] <- 15:13

      := 操作符使用形式

      第一种形式:

      DT[, c("colA", "colB", ...) := list(valA, valB, ...)]

      # when you have only one column to assign to you
      # can drop the quotes and list(), for convenience
      DT[, colA := valA]

      第二种形式:

      DT[, `:=`(colA = valA, # valA is assigned to colA
                colB = valB, # valB is assigned to colB
                ...
      )]

      4添加/更新/删除列

      添加列

      flights[, `:=`(speed = distance / (air_time/60), # speed in mph (mi/h)
                     delay = arr_delay + dep_delay)]   # delay in minutes
      head(flights)
      #    year month day dep_delay arr_delay carrier origin dest air_time distance hour    speed delay
      # 1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9 413.6490    27
      # 2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11 409.0909    10
      # 3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19 423.0769    11
      # 4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7 395.5414   -34
      # 5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13 424.2857     3
      # 6: 2014     1   1         4         0      AA    EWR  LAX      339     2454   18 434.3363     4

      ## alternatively, using the 'LHS := RHS' form
      # flights[, c("speed", "delay") := list(distance/(air_time/60), arr_delay + dep_delay)]

      对特定列行赋值

      查看列内容:

      # get all 'hours' in flights
      flights[, sort(unique(hour))]
      #  [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

      把 24 替换为 0:

      # subassign by reference
      flights[hour == 24L, hour := 0L]

      加上 [] 查看内容:

      flights[hour == 24L, hour := 0L][]
      #         year month day dep_delay arr_delay carrier origin dest air_time distance hour    speed
      #      1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9 413.6490
      #      2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11 409.0909
      #      3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19 423.0769
      #      4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7 395.5414
      #      5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13 424.2857
      #     ---
      # 253312: 2014    10  31         1       -30      UA    LGA  IAH      201     1416   14 422.6866
      # 253313: 2014    10  31        -5       -14      UA    EWR  IAH      189     1400    8 444.4444
      # 253314: 2014    10  31        -8        16      MQ    LGA  RDU       83      431   11 311.5663
      # 253315: 2014    10  31        -4        15      MQ    LGA  DTW       75      502   11 401.6000
      # 253316: 2014    10  31        -5         1      MQ    LGA  SDF      110      659    8 359.4545
      #         delay
      #      1:    27
      #      2:    10
      #      3:    11
      #      4:   -34
      #      5:     3
      #     ---
      # 253312:   -29
      # 253313:   -19
      # 253314:     8
      # 253315:    11
      # 253316:    -4

      验证一下:

      # check again for '24'
      flights[, sort(unique(hour))]
      #  [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

      删除列

      flights[, c("delay") := NULL]
      head(flights)
      #    year month day dep_delay arr_delay carrier origin dest air_time distance hour    speed
      # 1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9 413.6490
      # 2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11 409.0909
      # 3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19 423.0769
      # 4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7 395.5414
      # 5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13 424.2857
      # 6: 2014     1   1         4         0      AA    EWR  LAX      339     2454   18 434.3363

      ## or using the functional form
      # flights[, `:=`(delay = NULL)]

      只有一列可以这样写:

      flights[, delay := NULL]

      5结合 by 分组

      flights[, max_speed := max(speed), by = .(origin, dest)]
      head(flights)
      #    year month day dep_delay arr_delay carrier origin dest air_time distance hour    speed max_speed
      # 1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9 413.6490  526.5957
      # 2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11 409.0909  526.5957
      # 3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19 423.0769  526.5957
      # 4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7 395.5414  517.5000
      # 5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13 424.2857  526.5957
      # 6: 2014     1   1         4         0      AA    EWR  LAX      339     2454   18 434.3363  518.4507

      6添加多列

      按分组对子集取最大值并添加两列:

      in_cols  = c("dep_delay", "arr_delay")
      out_cols = c("max_dep_delay", "max_arr_delay")
      flights[, c(out_cols) := lapply(.SD, max), by = month, .SDcols = in_cols]
      head(flights)
      #    year month day dep_delay arr_delay carrier origin dest air_time distance hour    speed max_speed
      # 1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9 413.6490  526.5957
      # 2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11 409.0909  526.5957
      # 3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19 423.0769  526.5957
      # 4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7 395.5414  517.5000
      # 5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13 424.2857  526.5957
      # 6: 2014     1   1         4         0      AA    EWR  LAX      339     2454   18 434.3363  518.4507
      #    max_dep_delay max_arr_delay
      # 1:           973           996
      # 2:           973           996
      # 3:           973           996
      # 4:           973           996
      # 5:           973           996
      # 6:           973           996

      也可以将多列删除:

      # RHS gets automatically recycled to length of LHS
      flights[, c("speed", "max_speed", "max_dep_delay", "max_arr_delay") := NULL]
      head(flights)
      #    year month day dep_delay arr_delay carrier origin dest air_time distance hour
      # 1: 2014     1   1        14        13      AA    JFK  LAX      359     2475    9
      # 2: 2014     1   1        -3        13      AA    JFK  LAX      363     2475   11
      # 3: 2014     1   1         2         9      AA    JFK  LAX      351     2475   19
      # 4: 2014     1   1        -8       -26      AA    LGA  PBI      157     1035    7
      # 5: 2014     1   1         2         1      AA    JFK  LAX      350     2475   13
      # 6: 2014     1   1         4         0      AA    EWR  LAX      339     2454   18


      data.table 之 添加或删除列


      欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,数据代码已上传至QQ群,欢迎加入下载。

      群二维码:

      data.table 之 添加或删除列

      老俊俊微信:


      data.table 之 添加或删除列

      知识星球:


      data.table 之 添加或删除列


      所以今天你学习了吗?

      欢迎小伙伴留言评论!

      点击我留言!

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

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

      如果觉得对您帮助很大,赏杯快乐水喝喝吧!



       往期回顾 




      ◀data.table 之键搜索来快速提取子集

      ◀data.table 让你高效快速地处理数据

      ◀gglmannotate 轻松添加线形回归统计指标

      ◀基于 featureCounts 原理提取基因非冗余外显子长度

      ◀python 学习之推导式和匿名函数

      ◀python 学习之 featureCounts 软件的基因长度是怎么算的?

      ◀python 学习之数据结构和序列

      ◀ggcyto 优雅的可视化流式细胞数据

      ◀ggfittext 优雅的填充你的文字

      ◀ggforestplot 绘制美丽的森林图

      ◀...

      测试结尾

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

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      data.table 之键搜索来快速提取子集
      2022年1月16日

      下一篇文章

      R语言学习:Jupyter Lab构建R工作环境,处理类别型数据总结
      2022年1月17日

      你可能也喜欢

      8-1651542331
      跟着Nature学绘图(2) 箱线图-累积分布曲线图
      2 5月, 2022
      9-1651542322
      Julia 笔记之字符串
      2 5月, 2022
      0-1651542343
      Julia 笔记之数学运算和初等函数
      1 5月, 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年
      在线支付 激活码

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