首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计数所有NA并删除该行?

如何计数所有NA并删除该行?
EN

Stack Overflow用户
提问于 2017-06-07 19:22:07
回答 1查看 70关注 0票数 1

我有这样的数据

代码语言:javascript
复制
    df<-structure(list(best2 = c(8972.7, 1944, 2022.7, 13001.7, NA, 3228.6, 
NA, 186.4, 100, 2655.9), best3 = c(2634.4, 1181.3, 505.2, 2802.4, 
NA, 1707.6, NA, 186.4, 100, 1219), best4 = c(3079.3, 1512.9, 
NA, 2804.5, NA, 1597.6, NA, 186.4, 100, 1558.2), best5 = c(8972.7, 
1944, NA, 13001.7, NA, 3228.6, NA, 186.4, 100, 2655.9), best6 = c(2634.4, 
1181.3, NA, 2802.4, NA, 1707.6, NA, 186.4, 100, 1219), best7 = c(3079.3, 
1512.9, NA, 2804.5, NA, 1597.6, NA, 186.4, 100, 1558.2), best8 = c(8972.7, 
1944, NA, 13001.7, NA, 3228.6, NA, 186.4, 100, 2655.9), best9 = c(2634.4, 
1181.3, NA, 2802.4, NA, 1707.6, NA, 186.4, 100, 1219)), .Names = c("best2", 
"best3", "best4", "best5", "best6", "best7", "best8", "best9"
), row.names = c(NA, -10L), class = "data.frame")

我想一次把这些事情都做完

1-计算所有单元格为空或NA的行数。

答:2

2-为所有单元格计算具有恒定值的行。

答:2

3行数行,上半空单元格

答:0

4-计算下半空单元格行

答:1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 19:33:59

我们可以使用apply函数迭代data.frame的行。然后,我们在逻辑向量上使用rowSums

代码语言:javascript
复制
rowSums(all_logicals <- apply(df, 1, function(r){
    n <- length(r)
    nc2 <- n / 2
    nc2_plus1 <- nc2 + 1
    c('allNA' = all(is.na(r)),
    'allconstant' = (length(unique(r)) == 1 & !all(is.na(r))),
    'firsthalf' = all(is.na(r[1:nc2])) & !all(is.na(r[nc2_plus1:n])),
    'secondhalf' = all(is.na(r[nc2_plus1:n])) & !all(is.na(r[1:nc2])))
}))

  allNA allconstant   firsthalf  secondhalf 
      2           2           0           1 

查看传递给applyrowSums的结果可能会有所帮助

代码语言:javascript
复制
all_logicals

             [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10]
allNA       FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
allconstant FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
firsthalf   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
secondhalf  FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

编辑-使用结果删除行

我们可以使用all_logicals查找希望删除的行索引:

代码语言:javascript
复制
remove_rows <- unique(unlist(apply(all_logicals, 1, which)))
(df_sub <- df[-remove_rows,])

     best2  best3  best4   best5  best6  best7   best8  best9
1   8972.7 2634.4 3079.3  8972.7 2634.4 3079.3  8972.7 2634.4
2   1944.0 1181.3 1512.9  1944.0 1181.3 1512.9  1944.0 1181.3
4  13001.7 2802.4 2804.5 13001.7 2802.4 2804.5 13001.7 2802.4
6   3228.6 1707.6 1597.6  3228.6 1707.6 1597.6  3228.6 1707.6
10  2655.9 1219.0 1558.2  2655.9 1219.0 1558.2  2655.9 1219.0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44421173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档