【发布时间】:2018-08-25 23:44:31
【问题描述】:
假设我有以下列表:
list(c(1:5,NA,NA),NA,c(NA,6:10))
[[1]]
[1] 1 2 3 4 5 NA NA
[[2]]
[1] NA
[[3]]
[1] NA 6 7 8 9 10
我想用0替换所有NAs:
[[1]]
[1] 1 2 3 4 5 0 0
[[2]]
[1] 0
[[3]]
[1] 0 6 7 8 9 10
我原本以为is.na 会参与其中,但无法让它影响所有列表元素。我从相关问题 (Remove NA from list of lists) 中了解到,使用lapply 可以让我将is.na 应用于每个元素,但该帖子演示了如何删除(而不是替换)NA价值观。
我如何替换来自多个列表元素的NA值?
我尝试过for 循环和ifelse 方法,但我尝试过的所有方法要么很慢,要么不起作用,要么很笨重。必须有一个简单的方法来使用 apply 函数来做到这一点......
【问题讨论】:
-
lapply(L1, function (x) ifelse(is.na(x), 0, x)) -
顺便说一句,您可能只想将它们存储在一个表中,例如
data.table::rbindlist(lapply(L, function(x) data.frame(x)), id=TRUE)在这种情况下,普通方法将起作用.. -
@janos 感谢您的评论。有关
lapply方法的性能比较,请参阅我的post below。replace()比ifelse()快。