在R中排除空白和NA

时间:2012-10-06 21:08:00

标签: r na

  

可能重复:
  R - remove rows with NAs in data.frame

我有一个名为sub.new的数据框,其中包含多个列。我正在尝试排除包含NAblank space”的所有单元格。
我尝试使用subset(),但它的目标是特定列条件。无论如何都要扫描整个数据框并创建一个没有单元格NAblank space的子集?

在下面的示例中,只应保留第一行:

# ID               SNP             ILMN_Strand   Customer_Strand
ID1234              [A/G]          TOP           BOT
Non-Specific        NSB (Bgnd)     Green
Non-Polymorphic     NP (A)         Red
Non-Polymorphic     NP (T)         Purple
Non-Polymorphic     NP (C)         Green
Non-Polymorphic     NP (G)         Blue
Restoration         Restore        Green

有什么建议吗?感谢

2 个答案:

答案 0 :(得分:52)

一个好主意是在进行任何进一步分析之前将所有“”(空白单元格)设置为NA。

如果您正在从文件中读取输入,那么将所有“”强制转换为NAs是一个不错的选择:

foo <- read.table(file="Your_file.txt", na.strings=c("", "NA"), sep="\t") # if your file is tab delimited

如果您已经加载了表格,则可以执行以下操作:

foo[foo==""] <- NA

然后,为了只保留没有NA的行,您可以使用na.omit()

foo <- na.omit(foo)

或者保留没有NA的列:

foo <- foo[, colSums(is.na(foo)) == 0] 

答案 1 :(得分:10)

不确切知道你拥有什么样的数据集,所以我提供了一般答案。

x <- c(1,2,NA,3,4,5)
y <- c(1,2,3,NA,6,8)
my.data <- data.frame(x, y)
> my.data
   x  y
1  1  1
2  2  2
3 NA  3
4  3 NA
5  4  6
6  5  8
# Exclude rows with NA values
my.data[complete.cases(my.data),]
  x y
1 1 1
2 2 2
5 4 6
6 5 8