我是r的新手(具有MatLab的经验)。我仍在探索语法并学习以R方式思考。
我在data.frame类中有一些数据(3000 x 3000),以下代码似乎表现得非常慢。
data[is.na(data)] = 0
我想从一些有经验的用户那里得到一些评论。谢谢。
答案 0 :(得分:0)
假设您只是尝试将NA
替换为0
且您拥有所有数字,请使用矩阵。
x <- matrix(runif(9e+06,0,100),ncol=3000)
x[x <= 55 & x >= 54] <- NA
table(is.na(x))
FALSE TRUE
8910086 89914
x[is.na(x)] <- 0
table(is.na(x))
FALSE
9000000
编辑:上面的转换只需不到1秒作为矩阵,但仍然只有3秒作为data.frame(不包括表命令,这是那里最慢的部分)。当你说的很慢时,你的意思是什么时候?
编辑:对Simon的回应
system.time(is.na(x) <- 0)
user system elapsed
0.024 0.044 0.068 # yes faster
table(is.na(x))
FALSE TRUE
8909945 90055 # doesn't change x
system.time(x[is.na(x)] <- 0)
user system elapsed
0.252 0.032 0.287 # slower
table(is.na(x))
FALSE
9000000 # changes x