删除R中数据文件的空行

删除R中数据文件的空行,r,R,我有一个空行的数据集。我想删除它们: myData<-myData[-which(apply(myData,1,function(x)all(is.na(x)))),] 或者类似的东西 当我只使用前13000行时,它也可以工作 但它不适用于我的实际数据,有32000行 我做错了什么?这对我来说似乎毫无意义。我假设您要删除所有NAs的行。然后,您可以执行以下操作: data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA)

我有一个空行的数据集。我想删除它们:

myData<-myData[-which(apply(myData,1,function(x)all(is.na(x)))),]
或者类似的东西

当我只使用前13000行时,它也可以工作

但它不适用于我的实际数据,有32000行


我做错了什么?这对我来说似乎毫无意义。

我假设您要删除所有NAs的行。然后,您可以执行以下操作:

data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA), c(4, 8, NA)) # sample data
data
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1   NA    4
[3,]    4    6    7
[4,]   NA   NA   NA
[5,]    4    8   NA

data[rowSums(is.na(data)) != ncol(data),]
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1   NA    4
[3,]    4    6    7
[4,]    4    8   NA

如果您有空行,而不是NAs,则可以执行以下操作:

data[!apply(data == "", 1, all),]
要同时删除(NAs和空):


data这与上面的一些答案类似,但通过此选项,您可以指定是否要删除缺失值百分比大于或等于给定百分比的行(使用参数
pct

drop\u rows\u all\u na=ncol(x)*pct,]
其中,
x
是一个数据帧,
pct
是要清除的
NA
填充数据的阈值

pct=1
意味着删除具有其100%值的行
NA

pct=.5
表示删除至少有一半值的行
NA

使用包删除
NA
s行的替代解决方案


以下是一些
dplyr
选项:

# sample data
df <- data.frame(a = c('1', NA, '3', NA), b = c('a', 'b', 'c', NA), c = c('e', 'f', 'g', NA))

library(dplyr)

# remove rows where all values are NA:
df %>% filter_all(any_vars(!is.na(.)))
df %>% filter_all(any_vars(complete.cases(.)))  


# remove rows where only some values are NA:
df %>% filter_all(all_vars(!is.na(.)))
df %>% filter_all(all_vars(complete.cases(.)))  

# or more succinctly:
df %>% filter(complete.cases(.))  
df %>% na.omit

# dplyr and tidyr:
library(tidyr)
df %>% drop_na
#示例数据
df%filter\u all(任意变量(!is.na())
df%>%筛选所有(任何变量(完整的案例())
#删除只有某些值为NA的行:
df%>%filter\u all(所有变量(!is.na())
df%>%filter\u all(所有变量(完整的案例())
#或者更简洁地说:
df%>%过滤器(完整的案例()
df%>%na.省略
#dplyr和tidyr:
图书馆(tidyr)
df%>%下降

如果您只是想要一个方便的函数包装器,这里还有另一个答案。此外,上述许多解决方案都会删除带有任何NAs的行,而此解决方案仅删除所有NAs的行

data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA), c(4, 8, NA)) # sample data
data

rmNArows<-function(d){
goodRows<-apply(d,1,function(x) sum(is.na(x))!=ncol(d))
d[goodRows,]
}

rmNArows(data)

data第二个案例也可以通过以下方式处理:
data[complete.cases(data),]
@JoshuaUlrich Thx,以获取您的帮助答案!只是为了理解?为什么你让一个
数据[完成.案例(数据)]
的末尾,你的代码?@mrquad,这意味着你正在按行进行子集设置;看,这可能是最简单的解决方案,它对我有效——谢谢!无论是na.omit()还是drop_na()都不会返回非na行。如何在df上使用这种乐趣?这对我很有用-谢谢!
data[!apply(data == "", 1, all),]
data <- data[!apply(is.na(data) | data == "", 1, all),]
drop_rows_all_na <- function(x, pct=1) x[!rowSums(is.na(x)) >= ncol(x)*pct,]
myData %>% remove_empty("rows")
# sample data
df <- data.frame(a = c('1', NA, '3', NA), b = c('a', 'b', 'c', NA), c = c('e', 'f', 'g', NA))

library(dplyr)

# remove rows where all values are NA:
df %>% filter_all(any_vars(!is.na(.)))
df %>% filter_all(any_vars(complete.cases(.)))  


# remove rows where only some values are NA:
df %>% filter_all(all_vars(!is.na(.)))
df %>% filter_all(all_vars(complete.cases(.)))  

# or more succinctly:
df %>% filter(complete.cases(.))  
df %>% na.omit

# dplyr and tidyr:
library(tidyr)
df %>% drop_na
data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA), c(4, 8, NA)) # sample data
data

rmNArows<-function(d){
goodRows<-apply(d,1,function(x) sum(is.na(x))!=ncol(d))
d[goodRows,]
}

rmNArows(data)