【问题标题】:Convert consecutive numbers in a R dataframe转换 R 数据框中的连续数字
【发布时间】:2022-11-10 22:04:03
【问题描述】:

我有一个具有连续值的数据框,是否可以在 1 秒后使 = 0 的数字?

df <- data.frame(a = c(0,0,0,0,1,1,1,0,0,0),
  b = c(0,0,1,1,1,1,0,0,0,0),
  c = c(1,1,0,0,0,0,0,1,1,0))

像这样:

【问题讨论】:

    标签: r dataframe


    【解决方案1】:
    library(dplyr)
    df %>% 
      mutate(across(everything(), ~ +(.x == 1 & lag(.x, default = 0) != 1)))
    

    输出

       a b c
    1  0 0 1
    2  0 0 0
    3  0 1 0
    4  0 0 0
    5  1 0 0
    6  0 0 0
    7  0 0 0
    8  0 0 1
    9  0 0 0
    10 0 0 0
    

    【讨论】:

    • 感谢您的回答,但我看到第一种方法消除了之后的所有内容,即使是不连续的... es (0,0,0,0,1,1,1,0,0,1,1)上交 (0,0,0,0,1,0,0,0,0,0,0)
    • 我的错!没看到。检查编辑
    【解决方案2】:

    应用diff 函数可能是BaseR 的另一个替代方案,

    out <- rbind(df[1,],apply(df,2,diff))
    out[out!=1] <- 0 
    

    给,

    #   a b c
    #1  0 0 1
    #2  0 0 0
    #3  0 1 0
    #4  0 0 0
    #5  1 0 0
    #6  0 0 0
    #7  0 0 0
    #8  0 0 1
    #9  0 0 0
    #10 0 0 0
    

    【讨论】:

      【解决方案3】:
      df[-1,] <- df[-1,]*(df[-nrow(df),] == 0)
      df
      #>    a b c
      #> 1  0 0 1
      #> 2  0 0 0
      #> 3  0 1 0
      #> 4  0 0 0
      #> 5  1 0 0
      #> 6  0 0 0
      #> 7  0 0 0
      #> 8  0 0 1
      #> 9  0 0 0
      #> 10 0 0 0
      

      【讨论】:

      • 当代码附有解释时,它会更有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的答案并解释它如何回答所提出的具体问题。见How to Answer
      【解决方案4】:

      我们加载data.table 以供shift() 使用。

      library(data.table)
      df[] <- lapply(df, (x) replace(x, shift(x, fill = 0) == 1, 0))
      df
      #    a b c
      # 1  0 0 1
      # 2  0 0 0
      # 3  0 1 0
      # 4  0 0 0
      # 5  1 0 0
      # 6  0 0 0
      # 7  0 0 0
      # 8  0 0 1
      # 9  0 0 0
      # 10 0 0 0
      

      【讨论】:

      • 当代码附有解释时,它会更有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的答案并解释它如何回答所提出的具体问题。见How to Answer
      • @Chris如果有不清楚的地方,我很乐意解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 2019-07-04
      相关资源
      最近更新 更多