2014-02-06 38 views
1

我有一个R数据帧,有11M行和46列。一些字段包含空字符串(“”)。我需要用NAs替换那些空字符串,因为write.dta(在foreign包中)无法处理空字符串。替换数据帧中的空串需要很长的时间

但是,我的for循环需要很长时间(每列大约15分钟;有时R /整个系统崩溃)。我在8GB RAM Mac上运行RStudio(R 3.0.2)。有谁知道更快的方法?

for (i in 1:46){ 

    if (length(which(myDF[,i]==""))!=0) { 

    myDF[,i][which(myDF[,i]=="")]<-NA 

    } 
} 
+0

'for'-循环是臭名昭著的缓慢。尽可能避免。你可以看看'apply','sapply','lapply'。或者查看@Zbynek的解决方案。 – MrGumble

+2

@MrGumble不正确。根本不是真的。 –

回答

9

这应该工作:

myDF[myDF==''] <- NA 
+0

您是否有建议使这些数据框架具有posix列?我喜欢你的解决方案,但它会产生错误“as.POSIXlt.character(x,tz,...)中的错误:字符串不是标准的明确格式”,我想保留数据类型。 – triSaratops

+0

@triSaratops我认为你不能在POSIXlt列中有空字符串 - 'as.POSIXct('')'产生错误。你能否提供你的数据的例子? – Zbynek

2

您也可以使用is.na<-功能:R中

is.na(myDF) <- myDF == '' 
相关问题