2015-03-13 39 views
1

的数据具有与字符串“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', ] 

我想只有那些匹配的SERIESEQ行,不希望这些“NA”行破坏它。 EQ只是一个代表,有时候我需要一些其他的字符串匹配,甚至可能是'不适用'。

请帮助或任何指针,以解决此问题耍赖。 最好,如果这可以通过基地R解决,否则我打开使用任何软件包。谢谢阅读。

回答

1

NA没有可比性任何东西。您还需要删除所有NA值才能执行此操作。

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

?"=="

缺失值(NA)和NaN值被认为是不可比较的,甚至自己解决,所以他们参与的比较总是会导致NA。当字符串进行比较时,也会导致缺少值,而在当前整理语言环境中则有一个值无效。

+0

感谢您的响应。有“NA”是不是真的呐,行,而他们的系列变量值“NA”,它也包括像“N9”,“NB”,“NC”的价值观..等 所以那些行感兴趣不应该被丢弃。另外,data.frame不应该有任何实际的NA的任何地方,并运行is.na删除行错误tagegd为NA由R. 不知道如果我能够正确地传达意义。如果您需要任何澄清,请让我。 – Frash 2015-03-13 12:38:26

+0

如果“NA”不是缺失值,那么您需要使用另一个NA字符串进行阅读。例如,read.csv(“sample.csv”,na.strings =“zzzz”)。在这种情况下,你原来的代码应该可以正常工作 – wijjy 2015-03-13 12:43:14

+0

谢谢。将'na.strings'设置为某些不存在的字符串效果很好。 – Frash 2015-03-13 12:53:59

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