📜  如何删除 R DataFrame 中具有部分或全部 NA 的行?

📅  最后修改于: 2022-05-13 01:54:29.692000             🧑  作者: Mango

如何删除 R DataFrame 中具有部分或全部 NA 的行?

在本文中,我们将讨论如何在 R 编程语言中删除具有部分或全部 NA 的行。

我们将考虑一个数据框,然后删除 R 中的行。让我们创建一个具有 3 列和 6 行的数据框。

R
# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA), 
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# display
print(data)


R
# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA), 
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# remove NA's in entire dataframe
print(na.omit(data))


R
# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA), 
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# remove NA's in entire dataframe
print(data[complete.cases(data), ])


R
# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA),
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
# remove NA's in entire dataframe
print(data[rowSums(is.na(data)) == 0, ])


R
# load the dplyr package
library("tidyr")
  
# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA),
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# remove NA's in entire dataframe
print(data % > % drop_na())


输出

方法 1:使用 na.omit()函数删除具有某些 NA 的行

在这里,此函数将删除所有包含 NA 的行。

语法

na.omit(dataframe)

其中,数据框是输入数据框。

示例

R

# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA), 
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# remove NA's in entire dataframe
print(na.omit(data))

输出

names id subjects
1 manoj  1     java
2 bobby  2   python

方法 2:使用 complete.cases()函数删除具有某些 NA 的行

在这里,此函数将删除数据框中的 NA。

语法

dataframe[complete.cases(dataframe), ]

示例

R

# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA), 
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# remove NA's in entire dataframe
print(data[complete.cases(data), ])

输出

names id subjects
1 manoj  1     java
2 bobby  2   python

方法 3:使用 rowSums() 和 is.na() 函数删除具有某些 NA 的行

在这里,我们检查行的总和是否为 0,然后我们将考虑 NA,然后我们将删除它们。

语法

data[rowSums(is.na(data)) == 0, ]

其中,数据是输入数据帧

示例

R

# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA),
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
# remove NA's in entire dataframe
print(data[rowSums(is.na(data)) == 0, ])

输出

names id subjects
1 manoj  1     java
2 bobby  2   python

方法 4:使用 tidyr 包的 drop_na()函数删除具有某些 NA 的行

在这里,我们将使用 drop_na()函数删除具有 NA 的行,在此之前我们必须加载 tidyr 库

语法

data %>% drop_na() 

其中,数据是输入数据帧

示例

R

# load the dplyr package
library("tidyr")
  
# create dataframe
data = data.frame(names=c("manoj", "bobby", "sravan", "deepu", NA, NA),
                  id=c(1, 2, 3, NA, NA, NA),
                  subjects=c("java", "python", NA, NA, "java", "python"))
  
  
# remove NA's in entire dataframe
print(data % > % drop_na())

输出

names id subjects
1 manoj  1     java
2 bobby  2   python