【问题标题】:Exclude rows having 'NA' getting in any subsetting排除在任何子集中具有“NA”的行
【发布时间】:2015-03-13 11:56:24
【问题描述】:

数据有一个字符列,其中还包含字符串“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', ]

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

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

【问题讨论】:

    标签: r subset na


    【解决方案1】:

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

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

    来自?"=="

    缺失值 (NA) 和 NaN 值即使与它们自身也被视为不可比较,因此涉及它们的比较总是会导致 NA。当比较字符串并且其中一个在当前排序规则语言环境中无效时,也可能导致缺失值。

    【讨论】:

    • 感谢您的回复。具有“NA”的行并不是真正的 NA,而是它们的 SERIES 变量值为“NA”,它还包括“N9”、“NB”、“NC”等值。所以这些行是感兴趣的并且不应该被丢弃。此外,data.frame 在任何地方都不应该有任何实际的 NA,并且运行 is.na 会删除 R 错误地将行标记为 NA 的行。不确定我是否能够正确传达这种感觉。如果您需要任何澄清,请告诉我。
    • 如果“NA”不是缺失值,那么您需要使用替代的 NA 字符串进行读取。 read.csv("sample.csv",na.strings="zzzz") 例如。在这种情况下,您的原始代码应该可以正常工作。
    • 谢谢。将na.strings 设置为一些未出现的字符串效果很好。
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2016-10-17
      • 2021-11-30
      • 2021-05-28
      • 2018-09-14
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多