【问题标题】:How to calculate values for the first row that meets a certain condition?如何计算满足特定条件的第一行的值?
【发布时间】:2022-06-22 22:33:38
【问题描述】:

我有以下虚拟数据框:

t <- data.frame(
           a= c(0,0,2,4,5),
           b= c(0,0,4,6,5))
a   b
0   0
0   0
2   4
4   6
5   5

我只想替换列 b 的第一个不为零的值。假设满足此条件的行是i。我想用t[i+2]+t[i+1] 替换t$b[i],t$b 的其余部分应该保持不变。所以输出将是

a   b
0   0
0   0
2  11
4   6
5   5

实际上数据集是动态的,所以我不能直接指向特定的行,它必须满足 b 列中第一行不等于 0 的条件。 如何创建这个新的t$b

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    这里是使用group_by()mutate() 组合的迂回方式:

    library(tidyverse)
    
    t %>%
      mutate(
        b_cond = b != 0, 
        row_number = row_number()
      ) %>%
      group_by(b_cond) %>%
      mutate(
        min_row_number = row_number == min(row_number),
        b = if_else(b_cond & min_row_number, lead(b, 1) + lead(b, 2), b)
      ) %>%
      ungroup() %>%
      select(a, b) # optional, to get back to original columns
    
    # A tibble: 5 × 2
          a     b
      <dbl> <dbl>
    1     0     0
    2     0     0
    3     2    11
    4     4     6
    5     5     5
    

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多