2015-03-13 47 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