【问题标题】:How do you apply is.na to multiple columns in r您如何将 is.na 应用于 r 中的多个列
【发布时间】:2021-12-02 14:59:03
【问题描述】:

我想做一件非常简单但更优雅的事情。见下文。

x <- data.frame(matrix(1:12, 4, 3))

x[1,] <- NA

x$X4 <- ifelse(is.na(X1) & is.na(X2) & is.na(X3), 1, 0) 

现在我想做类似的事情

x$X4 <- ifelse(is.na(X1, X2, X3), 1, 0) 

很简单吧?有什么帮助吗?谢谢

我要实现的真实代码:

df2 <- df1 %>%
  rowwise() %>% 
  mutate(
    sum = ifelse(is.na(X1) & is.na(X2) & is.na(X3) & is.na(X4) & is.na(Y), NA_real_, sum(X1, X2, X3, X4, na.rm = T))
  )

【问题讨论】:

    标签: r na


    【解决方案1】:

    也许

    x$X4=ifelse(rowMeans(is.na(x))==1,1,0)
    
      X1 X2 X3 X4
    1 NA NA NA  1
    2  2  6 10  0
    3  3  7 11  0
    4  4  8 12  0
    

    x$X4=as.integer(rowMeans(is.na(x))==1)

    【讨论】:

    • 嗨,非常感谢您,它运行良好。此外,如果条件是在列的子集上指定的,则可以通过 x[,var1:varz] 调用它
    【解决方案2】:

    如果您想查看整个数据集以找到任何值,那么:

        any(is.na(df))
        # This will return true
    
    

    获取列总和:

        colSums(is.na(df))
    

    您也可以使用 purr 进行映射并获取每列 nas 的总和,但这就是上面所做的:

        map(df, ~sum(is.na(.)))
    

    在这些情况下,只需用平均值调整总和即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2020-04-22
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多