【问题标题】:How to updat a value in a specific coloumn in R如何更新R中特定列中的值
【发布时间】:2023-01-14 21:39:25
【问题描述】:

这是示例数据的一部分:

  

  dat<-read.table (text=" ID    Time    B1  T1  Q1  W1  M1
    1   12  12  0   12  11  9
    1   13  0   1   NA  NA  NA
    2   10  12  0   6   7   8
    2   14  0   1   NA  NA  NA
    1   16  16A 0   1   2   4
    1   14  0   1   NA  NA  NA
    2   14  16A 0   5   6   7
    2   7   0   1   NA  NA  NA
    1   7   20  0   5   8   0
    1   7   0   1   NA  NA  NA
    2   9   20  0   7   8   1
    2   9   0   1   NA  NA  NA

    ", header=TRUE)

我想为重复 ID 更新 T1 列中的值 1。对于第一个重复的 ID,应为值 1,对于第二个重复的 ID,应为值 2;对于第三个重复的 ID,值为 3,依此类推。我也想用空白单元格替换 NA 。这是预期的结果:

ID  Time    B1  T1  Q1  W1  M1
1   12  12  0   12  11  9
1   13  0   1           
2   10  12  0   6   7   8
2   14  0   1           
1   16  16A 0   1   2   4
1   14  0   2           
2   14  16A 0   5   6   7
2   7   0   2           
1   7   20  0   5   8   0
1   7   0   3           
2   9   20  0   7   8   1
2   9   0   3

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以像这样在每个组中使用 ifelse acrosscumsum

    library(dplyr)
    dat %>%
      group_by(ID, B1) %>%
      mutate(across(T1, ~ ifelse(.x == 1, cumsum(.x), T1)))
    #> # A tibble: 12 × 7
    #> # Groups:   ID, B1 [8]
    #>       ID  Time B1       T1    Q1    W1    M1
    #>    <int> <int> <chr> <int> <int> <int> <int>
    #>  1     1    12 12        0    12    11     9
    #>  2     1    13 0         1    NA    NA    NA
    #>  3     2    10 12        0     6     7     8
    #>  4     2    14 0         1    NA    NA    NA
    #>  5     1    16 16A       0     1     2     4
    #>  6     1    14 0         2    NA    NA    NA
    #>  7     2    14 16A       0     5     6     7
    #>  8     2     7 0         2    NA    NA    NA
    #>  9     1     7 20        0     5     8     0
    #> 10     1     7 0         3    NA    NA    NA
    #> 11     2     9 20        0     7     8     1
    #> 12     2     9 0         3    NA    NA    NA
    

    创建于 2023-01-14 reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多