当行不消失时删除data.frame中的所有空列和行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当行不消失时删除data.frame中的所有空列和行相关的知识,希望对你有一定的参考价值。
我有两个数据帧,dA
(HERE)和dB
(HERE)。它们完全相同,只是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中的所有空列和行的主要内容,如果未能解决你的问题,请参考以下文章