R 替换NA和x27;列表中所有数据表中的

R 替换NA和x27;列表中所有数据表中的,r,lapply,R,Lapply,我有一个包含许多数据表的列表。对于这些表中的每一个,我想用0替换NA 我知道如何分别更改每个数据表的NA,但有没有办法将其放入一个命令中,例如使用lappy 例如: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))); 但当我尝试时: test <- l

我有一个包含许多数据表的列表。对于这些表中的每一个,我想用0替换NA

我知道如何分别更改每个数据表的NA,但有没有办法将其放入一个命令中,例如使用lappy

例如: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)));
但当我尝试时:

test <- lapply(names(li), function(d) li[[d]][is.na(li[[d]])]<-0)

有没有办法不在我的列表中的所有数据表上使用循环就可以执行此操作?

如果您希望对不同列的
NA
进行不同的替换。 使用库中的
replace_na
函数
tidyr

library(tidyr)
lapply(li,function(df){replace_na(df,list(name=0,age=0))})
此处
replace\u na
需要每列的替换列表,当您可能希望用相同的值替换每列中的na时,该列表非常有用


希望这能起作用。

您只需要返回list元素

lapply(names(li), function(d) { li[[d]][is.na(li[[d]])] <-0; li[[d]] })
#[[1]]
#   name age
#1:    4  12
#2:    5   0

#[[2]]
#   name age
#1:   43 354
#2:  245   0
#3:  243   0
lapply(名称(li),函数(d){li[[d]][is.na(li[[d]])]]另一个选项:

library(dplyr)
lapply(li, function(x) { mutate_each(x, funs(replace(., is.na(.), 0))) })

lappy(li,function(d){d[is.na(d)]它可以工作!非常感谢!但是,没有办法“在任何地方都使用零”对吧?我尝试替换_na(df,list(rep(0,2)),它不会改变任何东西。所以我猜它确实需要列名(这使得使用此函数比在列表中的数据表上循环要简单).这正是@germcd方法,你可以给他评分;)哦..对不起..我没有完全看到..:)谢谢!这实际上是我要找的;因为我希望所有列都替换为相同的值。
library(tidyr)
lapply(li,function(df){replace_na(df,list(name=0,age=0))})
lapply(names(li), function(d) { li[[d]][is.na(li[[d]])] <-0; li[[d]] })
#[[1]]
#   name age
#1:    4  12
#2:    5   0

#[[2]]
#   name age
#1:   43 354
#2:  245   0
#3:  243   0
lapply(li, function(d) { d[is.na(d)] <- 0; d })
library(dplyr)
lapply(li, function(x) { mutate_each(x, funs(replace(., is.na(.), 0))) })