r - 减去上面不是 NA 的数字

我有一个类似于这个没有差异列的最小示例的表:

触发器 值(value)观 区别 0 3 0 不适用 0 不适用 1 5 2 0 4 0 不适用 1 10 6 表>

我想从每个触发点 (trigger = 1) 的数字中减去上述数字(并省略 NA)

有没有办法在 R 中做到这一点?

编辑:

我现在遇到的情况是触发器靠得很近,就像这个例子一样:

触发器 值(value)观 区别 0 3 0 不适用 0 不适用 1 5 2 0 4 1 5 1 0 10 表>

我该如何解决这个问题?

最佳答案

在“触发器”上使用cumsum 创建一个分组列并获取滞后,然后对第一个和最后一个元素进行差异处理并替换 它作为每组的 last

library(dplyr)
df1 %>%
    group_by(grp = lag(cumsum(trigger), default = 0)) %>% 
    mutate(difference = replace(rep(NA, n()), n(),
         values[n()] - values[1])) %>%
    ungroup %>%
    select(-grp)

-输出

# A tibble: 7 × 3
  trigger values difference
    <int>  <int>      <int>
1       0      3         NA
2       0     NA         NA
3       0     NA         NA
4       1      5          2
5       0      4         NA
6       0     NA         NA
7       1     10          6

对于第二种情况,我们可能需要一个带有 if/else 的条件来检查行数,即 if 行数大于 1 只需要替换

的计算
df2 %>%  
  group_by(grp = lag(cumsum(trigger), default = 0)) %>% 
  mutate(difference = if(n() > 1) replace(rep(NA, n()), n(), 
         values[n()] - values[1]) else NA) %>%
  ungroup

-输出

# A tibble: 7 × 4
  trigger values   grp difference
    <int>  <int> <dbl>      <int>
1       0      3     0         NA
2       0     NA     0         NA
3       0     NA     0         NA
4       1      5     0          2
5       0      4     1         NA
6       1      5     1          1
7       0     10     2         NA

数据

df1 <- structure(list(trigger = c(0L, 0L, 0L, 1L, 0L, 0L, 1L), values = c(3L, 
NA, NA, 5L, 4L, NA, 10L)), class = "data.frame", row.names = c(NA, 
-7L))

df2 <- structure(list(trigger = c(0L, 0L, 0L, 1L, 0L, 1L, 0L), values = c(3L, 
NA, NA, 5L, 4L, 5L, 10L)), class = "data.frame", row.names = c(NA, 
-7L))

https://stackoverflow.com/questions/69577760/

相关文章:

flutter - 如何修复 vscode 上的 Flutter_localizations 错误?

c# - GraphQL : Not Getting EF Related objects afte

haskell - 为什么我的 ByteString 在我的 x86_64 架构上是 BigEndi

amazon-web-services - 在哪里可以找到 AWS ARN 中服务和资源类型部分的可

arrays - 为什么我在执行 strcat() 时得到错误的源字符串输出?

vue.js - Module parse failed : Unexpected token (3

swift - 如何区分 Swift 中的泛型值是什么?

delphi - 如何在 Delphi 中以结果记录退出?

haskell - 如何使组合数据构造函数成为类的实例?

c++ - 将 std::string 转换为 std::string_view 的时间复杂度