【问题标题】:R: Create new column by subtracting 2 lines but only if 2 lines in a row have valuesR:通过减去 2 行来创建新列,但前提是一行中的 2 行有值
【发布时间】:2016-09-26 06:00:40
【问题描述】:

在 R 中,我有一个来自 csv 的数据框,其中包含 A 列中的不同值。 我想通过从 A 中的下一行减去 A 中的同一行来创建一个新列 B,但前提是有 2 个连续的值≠0

最好用一个例子来解释:

A    B    explanation
_    _    ___________
0    0    0, because A = 0
1    1    2-1
2    1    3-2
3    0    0, because next line in A = 0
0    0    0, because A = 0
4    0    0, because next line in A = 0
0    0    0, because A = 0
3   -1    2-3
...  ...  ...
2    0    0, because it is the last value in the df

由于不同的例外,我没有找到任何解决方案。 谢谢!

【问题讨论】:

    标签: r dataframe dataset


    【解决方案1】:

    我会使用 dplyr 来计算所有值,并检查是否满足条件。

    library(dplyr)
    
    df <- 
    df %>%
      mutate(
        B = lead(A) - A,
        is_zero = (A == 0) | (lead(A) == 0)
      )
    

    然后将满足您条件的任何设置为零。我认为这比使用ifelse 快一点。

    df$B[df$is_zero] <- 0
    

    给你:

    > select(df, -is_zero)
      A  B
    1 0  0
    2 1  1
    3 2  1
    4 3  0
    5 0  0
    6 4  0
    7 0  0
    8 3 NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      相关资源
      最近更新 更多