排除有' NA'进入任何子集

时间:2015-03-13 11:56:25

标签: r subset na

数据的字符列中包含字符串' NA'也在其中。如果我根据该列执行数据的子集,我会得到那些具有' NA'在那一栏。并且所有这些行都用NA替换实际数据。

下面给出了一个数据样本:

sample.csv

SYMBOL,SERIES,CLOSE,TIMESTAMP
A2ZMES,EQ,10.8,4/1/2014
IIFLFIN,NA,999.2,4/1/2014
SCIT,NA,1150,4/1/2014
IIFLFIN,NA,1019.81,8/1/2014
IRFC,NA,1098.09,8/1/2014
AICHAMP,BE,14.15,4/1/2014

我为此目的使用的代码。

data = read.csv('sample.csv', as.is = T)
subdata = data [ data $SERIES=='EQ', ]

我想只在 EQ 列中获取与 SERIES 相匹配的行,不要让那些' NA'行破坏它。 EQ只是一个代表,有时候我需要一些其他的字符串匹配,甚至可能是' NA'。

请帮助或任何指针来解决这个琐碎的问题。 如果这可以通过基数R解决,那么最好,否则我可以使用任何包。谢谢你的阅读。

2 个答案:

答案 0 :(得分:1)

NA无法与任何东西相比。您还需要删除所有NA值才能执行此操作。

subdata = data [!is.na(data$SERIES) & data$SERIES=='EQ', ]

来自?"=="

  

缺失值(NA)和NaN值即使对自身也被视为不可比较,因此涉及它们的比较将始终导致NA。当比较字符串并且在当前的排序规则区域设置中无效时,也会导致缺少值。

答案 1 :(得分:0)

library(dplyr)

数据

data <-
    structure(list(SYMBOL = c("A2ZMES", "IIFLFIN", "SCIT", "IIFLFIN", "IRFC", "AICHAMP"),
                   SERIES = c("EQ", NA, NA, NA, NA, "BE"), 
                   CLOSE = c(10.8, 999.2, 1150, 1019.81, 1098.09, 14.15), 
                   TIMESTAMP = c("4/1/2014", "4/1/2014", "4/1/2014", "8/1/2014", "8/1/2014", "4/1/2014")), 
              .Names = c("SYMBOL", "SERIES", "CLOSE", "TIMESTAMP"), 
              class = "data.frame", 
              row.names = c(NA, -6L))

解决方案

# filter non missing values

data %>% 
    filter(!is.na(SERIES))

   SYMBOL SERIES CLOSE TIMESTAMP
1  A2ZMES     EQ 10.80  4/1/2014
2 AICHAMP     BE 14.15  4/1/2014