数据的字符列中包含字符串' 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解决,那么最好,否则我可以使用任何包。谢谢你的阅读。
答案 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