首页 > 解决方案 > R按列中的数字对数据进行分组

问题描述

我正在尝试按列中的数字对数据进行分组,我尝试了不同版本的 group_by、cut、group 等,但我无法得到它。我有很多看起来像这样的数据:

  position variants

     3      snv
     5      snv
    12      snv
    17      mnv
    22 deletion
    27      snv
    33      snv
    35      snv
    42      snv
    46      mnv
    50      snv
    53 deletion
    60      snv
    62      snv
    65      snv
    70      snv
variants <- c(rep("snv", 3),rep("mnv", 1),rep("deletion", 1),rep("snv", 4), "mnv", rep("snv"), "deletion", rep("snv", 4))
variants              
position = c(3, 5, 12, 17, 22, 27, 33, 35, 42, 46, 50, 53, 60, 62, 65, 70)
position
patient1 = data.frame(position, variants)
patient1

我希望能够像这样对数据进行分组:

group  tally
1-10    2snv
11-20   1snv 1mnv
21-30   1deletion 1snv
31-40   2snv 
etc

这样我就可以进行进一步的下游分析。并且能够将其更改为 1-5 或 1-2 等组。非常感谢

标签: rdata-wrangling

解决方案


这里是纯 R 解决方案。当然,您可以通过相应的调用替换变量:

variants <- c(rep("snv", 3),rep("mnv", 1),rep("deletion", 1),rep("snv", 4), "mnv", rep("snv"), "deletion", rep("snv", 4))
position = c(3, 5, 12, 17, 22, 27, 33, 35, 42, 46, 50, 53, 60, 62, 65, 70)
patient1 = data.frame(position, variants)

labels = cut(position, seq(0, max(position), 10))
groups = split(patient1 , labels)
lapply(groups , function(x) {
  paste( table(x$variants), names(table(x$variants)), collapse = ", " )
      }
  )

推荐阅读