2014-10-12 248 views
0

我有一个data-frame包含#作为多列中的缺失值。我怎么能把所有这样的# s转换成NA s?如何将R数据框中的特殊值转换为NA?

+1

'read.table(file,na.strings =“#”)' – 2014-10-12 05:57:05

+0

Thanks @RichardScriven。如果数据已经存在于'data-frame'中怎么办? (假设我只能访问'data-frame'而不是'file') – Sangram 2014-10-12 05:58:50

+0

然后尝试'df [df ==“#”] < - NA' – 2014-10-12 05:59:30

回答

2

您可以通过几种方法做到这一点。一个是与na.strings参数设置为"#"

read.table(file, na.strings = "#") 

另一种是只用

df[df == "#"] <- NA 
2

更改数据帧df值我写a function makemeNA即重新读取文件部分my "SOfun" package

功能看起来像这样(如果你不想让包只是这个功能):

makemeNA <- function (mydf, NAStrings, fixed = TRUE) { 
    if (!isTRUE(fixed)) { 
    mydf[] <- lapply(mydf, function(x) gsub(NAStrings, "", x)) 
    NAStrings <- "" 
    } 
    mydf[] <- lapply(mydf, function(x) type.convert(
    as.character(x), na.strings = NAStrings)) 
    mydf 
} 

用法是:

makemeNA(df, "#") 

获取包含:

library(devtools) 
install_github("mrdwab/SOfun") 
2
is.na(dat) <- dat == "#" 

将执行此操作(其中dat是您的数据帧的名称)。