2014-01-29 66 views
6

我目前有一个数据帧,其中有几行我想转换为“NA”。当我第一次从.csv导入这个数据框时,我可以使用na.strings = c(“A”,“B”,“C”)等来删除我不想要的值。再次做同样的事情,但这次使用一个数据帧已经不导入其他.csvna.strings应用于数据帧

要导入的数据,我用:现在

data<-read.csv("code.csv", header=T, strip.white=TRUE, stringsAsFactors=FALSE, na.strings=c("", "A", "B", "C")) 

,用“数据”,我想子集它,同时删除行中的更具体的值..我尝试类似:

data2<-data.frame(data, na.strings=c("D", "E", "F")) 

当然,这不起作用,因为我认为na.strings只适用于“阅读”包..不是其他功能。是否有任何等价物将某些值简单地转换为NA,以便我可以轻松地将na.omit(data2)?

感谢您的帮助。

回答

1

只需直接指定NA值即可。

例如为:

x <- data.frame(a=1:5, b=letters[1:5]) 
# > x 
# a b 
# 1 1 a 
# 2 2 b 
# 3 3 c 
# 4 4 d 
# 5 5 e 

# convert the 'b' and 'd' in columb b to NA 
x$b[x$b %in% c('b', 'd')] <- NA 
# > x 
# a  b 
# 1 1 a 
# 2 2 <NA> 
# 3 3 c 
# 4 4 <NA> 
# 5 5 e 
+0

感谢所有的答案大家。很多很有用 –

1

因为我们没有数据,我将使用mtcars。假设我们要在等于4或19.2 NA

ind <- which(mtcars == 4, arr.ind = TRUE) 
mtcars[ind] <- NA 

在你的设置,你会用“d”或“E”

+0

谢谢Sven。你是对的。我编辑了我的答案。你的回答更好:) – Vincent

1
data[ data == "D" ] = NA 

注意更换这个数字mtcars任何地方设置值是如果您试图用“D”替换NA,则反转(df [df == NA] =“D”)将不起作用;你将需要使用DF [is.na(DF)] < - “d”

3

下面是多列替换值的方法:

# an example data frame 
dat <- data.frame(x = c("D", "E", "F", "G"), 
        y = c("A", "B", "C", "D"), 
        z = c("X", "Y", "Z", "A")) 
# x y z 
# 1 D A X 
# 2 E B Y 
# 3 F C Z 
# 4 G D A 

# values to replace 
na.strings <- c("D", "E", "F") 

# index matrix 
idx <- Reduce("|", lapply(na.strings, "==", dat)) 

# replace values with NA 
is.na(dat) <- idx 

dat 
#  x y z 
# 1 <NA> A X 
# 2 <NA> B Y 
# 3 <NA> C Z 
# 4 G <NA> A