计算不包含“NA”的数据帧的行[重复]

Posted

技术标签:

【中文标题】计算不包含“NA”的数据帧的行[重复]【英文标题】:Count rows of a data frame which do not contain `NA` [duplicate] 【发布时间】: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 不是在问如何删除行,而是在问如何计算完整的行。是的,这是一个“家庭作业问题”。 【参考方案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 ,完整的案例不返回过滤的数据帧,而是返回一个逻辑向量。请纠正这个:)

以上是关于计算不包含“NA”的数据帧的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

获取具有特定数量的重复值的行

R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]

根据R中的2列删除重复的行

从R中的data.table中删除带有NA的行[重复]

如何在 R 中合并同一数据框中的行(基于特定列下的重复值)?

合并数据框中的行,其中行不相交并包含 NA