当行不消失时删除data.frame中的所有空列和行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当行不消失时删除data.frame中的所有空列和行相关的知识,希望对你有一定的参考价值。

我有两个数据帧,dAHERE)和dBHERE)。它们完全相同,只是dB有一个完全空的列和多个空的行。

dA <- read.csv("https://raw.githubusercontent.com/izeh/m/master/irr3.csv", h = T)
dB <- read.csv("https://raw.githubusercontent.com/izeh/m/master/irr4.csv", h = T)

我想删除dB中的所有空列和所有空行,以便dB变得与dA完全一样。

当前,我尝试通过以下方法实现目标但是看起来空行不会被删除

# remove columns with all NA
B1 <- dB[, colSums(is.na(dB)) != nrow(dB)]

# remove rows with all NA
B2 <- B1[rowSums(is.na(B1)) != ncol(B1), ]   # NOW, check by:  `nrow(B2)` the `NA` haven't 
                                             # been removed !!
答案

您有NA并且还有空行。你可以做

B1[rowSums(is.na(B1) | B1 == "") != ncol(B1), ]

#   study.name  group.name outcome ESL prof scope type
#1  Shin.Ellis    ME.short       1   1    2     1    1
#2  Shin.Ellis     ME.long       1   1    2     1    1
#3  Shin.Ellis   DCF.short       1   1    2     1    2
#4  Shin.Ellis    DCF.long       1   1    2     1    2
#5  Shin.Ellis  Cont.short       1   1    2    NA   NA
#6  Shin.Ellis   Cont.long       1   1    2    NA   NA
#8    Trus.Hsu       Exper       1   2    2     2    1
#.....

我们也可以使用filter_all中的dplyr

library(dplyr)
B1 %>% filter_all(any_vars(!is.na(.) & . != ""))
另一答案

[这是Filter中的base R的选项

Filter(function(x) !all(is.na(x)), dB)
#  study.name  group.name outcome ESL prof scope type
#1  Shin.Ellis    ME.short       1   1    2     1    1
#2  Shin.Ellis     ME.long       1   1    2     1    1
#3  Shin.Ellis   DCF.short       1   1    2     1    2
#4  Shin.Ellis    DCF.long       1   1    2     1    2
#5  Shin.Ellis  Cont.short       1   1    2    NA   NA
#6  Shin.Ellis   Cont.long       1   1    2    NA   NA
#7                              NA  NA   NA    NA   NA
#8    Trus.Hsu       Exper       1   2    2     2    1
#...

或带有any

Filter(function(x) any(!is.na(x)), dB)

删除行

B1[Reduce(`|`, lapply(B1, is.na)),] 

以上是关于当行不消失时删除data.frame中的所有空列和行的主要内容,如果未能解决你的问题,请参考以下文章

从末尾删除向量中的所有空元素

如何递归删除PowerShell中的所有空文件夹?

如何一次性删除通用列表中的所有空元素?

windows批量删除当前目录以及子目录的所有空文件夹

从 SQL Server 中的 XML 中删除所有空节点

如何将默认值 0 赋予 Handsontable 中的所有空单元格?