【问题标题】:Count rows of a data frame which do not contain `NA` [duplicate]计算不包含“NA”的数据帧的行[重复]
【发布时间】:2012-12-31 10:18:53
【问题描述】:

可能重复:
R - remove rows with NAs in data.frame

我有一个从以下函数派生的数据框:

complete <- function(directory,id = 1:332) {

   csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

   nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))

        rowlabels <- nrow(nrows)

        data.frame(id=sprintf('%3d', id), 
            nobs=sapply(csvfiles,function(x) length(count.fields(x))),
            row.names=rowlabels
           )
       }

此函数计算对象 csvfiles 生成的目录中包含的每个文件的行数。然后它输出一个数据框,显示文件编号以及行数(所以两列)

我以为我知道了,但问题是我现在必须排除每个文件中存在 NA 实例的行。

如何编辑它以忽略每个文件中的那些行,只计算不存在 NAs 的行?

【问题讨论】:

  • 这是您的第 N 篇文章,标题为 R-project。那是多余的。只需像您所做的那样使用[r] 标签。并随时阅读其他一些帖子。
  • 看看?complete.cases。几个月前完成了同样的在线课程,我很确定它会在某些时候在讲座中被提及,请留意类似的提示。
  • 请先搜索再发帖。在 google 或 s.o. 上两分钟搜索会找到您的答案。
  • 您对@thelatemail 的回复在您的头顶上方放置了一个闪烁的大霓虹灯标志,它尖叫着“我没有阅读显示给我的问题,也没有费心阅读有关该功能的文档。 "
  • 这不是重复的。 OP 不是在问如何删除行,而是在问如何计算完整的行。是的,这是一个“家庭作业问题”。

标签: r dataframe missing-data


【解决方案1】:

替换这一行:

nrows &lt;- sapply( csvfiles, function(f) nrow(read.csv(f)))

使用这一行,它使用complete.cases 函数:

nrows &lt;- sapply( csvfiles, function(f) nrow(complete.cases(read.csv(f))))

complete.cases 接受一个数据帧并返回一个具有相同列的数据帧,但所有包含至少一个NA 的行都被丢弃。

【讨论】:

  • 嗯,对我来说,complete.cases 似乎返回一个逻辑向量,而不是一个过滤的数据帧。所以我不得不执行sum,而不是nrow
  • -1 ,完整的案例不返回过滤的数据帧,而是返回一个逻辑向量。请纠正这个:)
猜你喜欢
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 2020-07-06
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多