【问题标题】:create new column based on sum of another column and plot根据另一列的总和创建新列并绘制
【发布时间】:2022-12-03 06:15:41
【问题描述】:

我有一个名为 data_frame 的大型数据框,其中包含 3 列 PRESTATUSCHR,如下所示:

PRE         STATUS   CHR
1_752566    GAINED   1
1_776546    LOST     1
1_832918    NA       1
1_842013    LOST     1
1_846864    GAINED   1
11_8122943  NA       11
11_8188699  GAINED   11
11_8321128  NA       11
23_95137734 NA       23
23_95146814 GAINED   23

从这里我想按数字对CHR 进行分组,然后找到每组的总和。如果可能的话,我想要一个新的数据表(我们称之为TOTAL),显示每个组号的总和,如下所示:

CHR      TOTAL_SUM
1        5
11       3
23       2

从这里我想创建另一个名为BY_STATUS的数据表,其中包含 3 列CHR、'SUM_GAINED'、'SUM_LOST',其中'SUM_GAINED 是与'STATUS'输出'GAINED'和'相匹配的 CHR 的总和SUM_LOST' 是与 'STATUS' 输出 'LOST' 匹配的 CHR 的总和,如下所示:

CHR      SUM _GAINED    SUM_LOST
1        2              2
11       1              0
23       1              0

然后我会创建两个不同的情节: 第一个图是数据表 TOTAL 以可视化每个数字的总和,其中我的 x 轴是 NUM,我的 y 轴是 SUM

第二个图是数据表BY_STATUS,根据SUM_GAINEDSUM_LOST可视化CHR中每个数字的不同频率,其中我的x轴是CHR,我的y轴都是@ 987654340@和SUM_LOST。也许是两个不同 y 轴的并排比较?

【问题讨论】:

    标签: r dataframe ggplot2 datatable mutate


    【解决方案1】:

    我们可以将列转换为逻辑列,并在按“CHR”分组后计算(sum)GAINED 和 LOST 的 TRUE 值

    library(dplyr)
    df %>%
       group_by(CHR) %>%
       summarise(SUM_GAINED = sum(STATUS == "GAINED", na.rm = TRUE),
           SUM_LOST = sum(STATUS == "LOST", na.rm =TRUE))
    

    -输出

    # A tibble: 3 × 3
        CHR SUM_GAINED SUM_LOST
      <int>      <int>    <int>
    1     1          2        2
    2    11          1        0
    3    23          1        0
    

    或者使用pivot_wider

    library(tidyr)
    df %>% 
     drop_na() %>% 
     pivot_wider(id_cols = CHR, names_from = STATUS, 
      values_from = STATUS, values_fn = length, values_fill = 0)
    # A tibble: 3 × 3
        CHR GAINED  LOST
      <int>  <int> <int>
    1     1      2     2
    2    11      1     0
    3    23      1     0
    

    对于绘图,最好使用ggplot将其设为长格式

    library(ggplot2)
    df %>%
      drop_na(STATUS) %>% 
      count(CHR, STATUS) %>%
      ggplot(aes(x = CHR, y = n, fill = STATUS)) + 
       geom_col(position="dodge")
    

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2022-08-12
      • 2023-02-05
      • 2017-08-20
      相关资源
      最近更新 更多