r计算每行中缺少值的单元格

时间:2016-11-21 08:14:43

标签: r count missing-data

我有一个如下所示的数据框

android {
  testBuildType 'espresso'

  buildTypes {
    espresso.initWith(buildTypes.release)
  }
}

dependencies {
  espressoCompile 'somedependency' // you can even have special dependencies
}

我正在尝试计算每行中 Id Date Col1 Col2 Col3 Col4 30 2012-03-31 A42.2 20.46 NA 36 1996-11-15 NA V73 55 96 2010-02-07 X48 Z16 13 40 2010-03-18 AD14 20.12 36 69 2012-02-21 22.45 11 2013-07-03 81 V017 TCG11 22 2001-06-01 67 83 2005-03-16 80.45 V22.15 46.52 X29.11 92 2012-02-12 34 2014-03-10 82.12 N72.22 V45.44 空单元格的数量,最终预期输出如下

NA

最后一列 Id Date Col1 Col2 Col3 Col4 MissCount 30 2012-03-31 A42.2 20.46 NA 2 36 1996-11-15 NA V73 55 2 96 2010-02-07 X48 Z16 13 1 40 2010-03-18 AD14 20.12 36 1 69 2012-02-21 22.45 3 11 2013-07-03 81 V017 TCG11 1 22 2001-06-01 67 3 83 2005-03-16 80.45 V22.15 46.52 X29.11 0 92 2012-02-12 4 34 2014-03-10 82.12 N72.22 V45.44 1 将存储每行MissCount或空单元格的数量。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

单线

rowSums(is.na(df) | df == "")
@DavidArenburg在他的评论中给出的答案肯定是要走的路,假设你不介意检查数据框中的每一列。如果您真的只想检查Col1Col4,那么使用apply功能可能更有意义。

apply(df, 1, function(x) {
                sum(is.na(x[c("Col1", "Col2", "Col3", "Col4")])) +
                sum(x[c("Col1", "Col2", "Col3", "Col4")] == "", na.rm=TRUE)
             })

编辑:缩短代码

apply(df[c("Col1", "Col2", "Col3", "Col4")], 1, function(x) {
                    sum(is.na(x)) +
                    sum(x == "", na.rm=TRUE)
                 })

或者数据列与示例数据完全相同:

apply(df[3:6], 1, function(x) {
                        sum(is.na(x)) +
                        sum(x == "", na.rm=TRUE)
                     })

答案 1 :(得分:1)

这应该这样做。

yourframe$MissCount = rowSums(is.na(yourframe) | yourframe == "" | yourframe == " "))

答案 2 :(得分:0)

您可以使用库purrr中的by_row:

library(purrr)

#sample data frame
x <- data.frame(A1=c(1,NA,3,NA),
                A2=c("A","B"," ","C"),
                A3=c(" "," ",NA,"t"))

在这里,您可以在每一行上应用一个功能,您可以根据自己的情况进行编辑。你可以使用你想要的任何功能。 在下面的示例中,我使用sum(...)计算每行中的空或NA条目:

by_row(x, function(y) sum(y==" "| (is.na(y))),
       .to="MissCount",
       .collate = "cols"
       )

你会得到:

# A tibble: 4 x 4
     A1     A2     A3 MissCount
  <dbl> <fctr> <fctr>     <int>
1     1      A                1
2    NA      B                2
3     3            NA         2
4    NA      C      t         1

答案 3 :(得分:0)

我们可以使用

col1, col2
int1, string1
int2, string2