【问题标题】:Sum 2 columns, ignore NA, except when both are NA [duplicate]对 2 列求和,忽略 NA,除非两者都是 NA [重复]
【发布时间】:2019-10-09 20:20:03
【问题描述】:

我尝试将 2 列与一些 NA 相加。有很多论坛问题,比如我的第一个问题:如何求和和忽略NA,但现在我确实希望它在两列在特定行中都有NA 时返回NA。这是一个例子:

  df<-data.table(x = c(1,2,NA),
                 y = c(1,NA,NA))
> df
  x  y
  1  1
  2 NA
 NA NA

我想要这个:

  x  y final
  1  1   2
  2 NA   2
 NA NA   NA

我尝试了以下方法:

df$sum<-rowSums(df[,c("x", "y")], na.rm=TRUE)
  df$final<-ifelse (is.na(df$x) && is.na(df$y) , NA,
                              ifelse (is.na(df$x) | is.na(df$y), df$sum,
                                      ifelse (!is.na(df$x) && !is.na(df$y), df$sum)))

但这并没有返回我想要的..有人可以帮助我吗..?

注意:有人说这是重复的,因为我要求忽略 NA,但这些问题并没有回答我的主要问题:2 x NAget me NA 而不是 0 应该如何处理

p>

【问题讨论】:

    标签: r sum data.table na


    【解决方案1】:

    这里还有两个选项:

    ifelse(rowSums(is.na(df)) != ncol(df), rowSums(df, na.rm = TRUE), NA)
    #[1]  2  2 NA
    

    vals <- rowSums(df, na.rm = TRUE)
    NA^(vals == 0) * vals 
    #[1]  2  2 NA
    

    【讨论】:

      【解决方案2】:

      我使用了以下内容。即使有 NA,它也会给出总和,但当所有求和的元素都是 NA 时,它会返回 NA。

      rowSums(df, na.rm = TRUE) * NA ^ (rowSums(!is.na(df)) == 0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-02
        • 2017-12-21
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多