【发布时间】:2015-09-11 11:01:44
【问题描述】:
我有一个包含许多数据表的列表。对于这些表中的每一个,我想用 0 替换 NA。
我知道如何分别更改每个数据表的 NA,但有没有办法将其放入一个命令中,例如使用 lapply?
例如:li 是一个包含两个数据表的列表,dt1 和 dt2。
li <- list(dt1 = data.table(name = c(4,5), age = c(12, NA)), dt2= data.table(name = c(43,245,243), age = c(354,NA,NA)));
在一个 data.table 中将 NA 更改为 0 就像一个魅力:
d <- "dt1";
li[[d]][is.na(li[[d]])]<-0;
结果:
> li
$dt1
name age
1: 4 12
2: 5 0
$dt2
name age
1: 43 354
2: 245 NA
3: 243 NA
但是当我尝试时:
test <- lapply(names(li), function(d) li[[d]][is.na(li[[d]])]<-0)
我明白了:
> test
[[1]]
[1] 0
[[2]]
[1] 0
有什么方法可以做到这一点,而无需对列表中的所有数据表使用循环?
【问题讨论】:
-
lapply(li, function(d) {d[is.na(d)] <- 0; d })