na.strings应用于数据帧

时间:2014-01-29 04:28:44

标签: r

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

我想再次做同样的事情,但这次使用的是数据帧,而不是导入另一个.csv

要导入数据,我使用了:

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)?

感谢您的帮助。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只需直接指定NA值。

e.g:

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

答案 2 :(得分:1)

由于我们没有您的数据,我将使用mtcars。假设我们想要将mtcars中的值设置为等于4或19.2到NA

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

在您的设置中,您可以将此数字替换为“D”或“E”

答案 3 :(得分:1)

data[ data == "D" ] = NA

请注意,如果您尝试用“D”替换NA,则反向(df [df == NA] =“D”)将不起作用;你需要使用df [is.na(df)]&lt; - “D”