【问题标题】:Ignore NAs so that I can add value to negative numbers忽略 NA,以便我可以为负数添加值
【发布时间】:2022-08-04 23:51:31
【问题描述】:

我有一列是睡眠小时数,它是通过从 got_to_slepp 列中减去一个 wake_up 列而创建的 - 但是,我得到的是负数,因为 difftime 没有认识到 PM 值是第一天和 AM 数字第二天。

我意识到,从数学上讲,如果我可以将 24 加到负值上,我就会得出正确的小时数。

但是,因为我有 NA 值,所以我只能用 0 或 NA 替换负值,并且当我尝试添加 24 时出现错误。

例子:

df$hours_slept[df$hours_slept < 0] <- d5_df$hours_slept + 24 

这给了我错误:

NextMethod(\"[<-\") 中的错误: 下标作业中不允许使用 NA

我尝试添加!is.na,但这并没有像我想象的那样工作。

    标签: r time na difftime


    【解决方案1】:

    你可以像这样使用ifelse

    set.seed(1234)
    df <- data.frame(hours_slept = sample(seq(-12,12, .1),20, replace=TRUE))
    df$hours_slept[sample(1:20,8)] <- NA
    df
    #>    hours_slept
    #> 1         -9.3
    #> 2         -4.1
    #> 3           NA
    #> 4           NA
    #> 5         11.5
    #> 6         -1.0
    #> 7          1.6
    #> 8           NA
    #> 9          4.5
    #> 10          NA
    #> 11         1.1
    #> 12        -2.3
    #> 13          NA
    #> 14         9.3
    #> 15          NA
    #> 16        -5.1
    #> 17        -4.2
    #> 18         8.5
    #> 19          NA
    #> 20          NA
    df <- transform(df, hours_slept=ifelse(hours_slept < 0, -hours_slept, hours_slept))
    df
    #>    hours_slept
    #> 1          9.3
    #> 2          4.1
    #> 3           NA
    #> 4           NA
    #> 5         11.5
    #> 6          1.0
    #> 7          1.6
    #> 8           NA
    #> 9          4.5
    #> 10          NA
    #> 11         1.1
    #> 12         2.3
    #> 13          NA
    #> 14         9.3
    #> 15          NA
    #> 16         5.1
    #> 17         4.2
    #> 18         8.5
    #> 19          NA
    #> 20          NA
    

    reprex package (v2.0.1) 于 2022 年 7 月 26 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 2018-04-24
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多