我有一个如下所示的数据框
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
或空单元格的数量。非常感谢任何帮助。
答案 0 :(得分:3)
单线
rowSums(is.na(df) | df == "")
@DavidArenburg在他的评论中给出的答案肯定是要走的路,假设你不介意检查数据框中的每一列。如果您真的只想检查Col1
到Col4
,那么使用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