我有一个data.frames列表,我想有条件地重新分配data.frame中的值。如果我只是分配给一个data.frame,我会说像
DF[DF==9] <- NA
将data.frame中的所有条目设置为9到NA。但是,当我尝试使用lapply
对列表中的每个data.frame执行相同的过程时:
List_of_DFs <- list(DF1, DF2, DF3)
List_of_DFs <- lapply(List_of_DFs, function(x) x[x==9] <- NA)
而不是每个值9变为NA,整个列表条目变为NA。因此,在上述情况中,List_of_DFs
变为NA,NA,NA
。
我知道我可以使用for
循环和[[]]
子集运算符执行此操作,但我认为必须有更好的方法。
如果它有趣或相关,这个问题背后的动机是data.frames列表来自XLConnect,我随后将按行绑定data.frames,但我首先要删除一些字符值在一个应该全部为数字的列中,所以我可以强制转换为数字,然后按行绑定。
答案 0 :(得分:0)
我们需要返回x
才能获取data.frame
lapply(List_of_DFs, function(x) {x[x==9] <- NA; x})
或另一个选项是replace
lapply(List_of_DFs, function(x) replace(x, x == 9, NA))
如果我们将dplyr
与mutate_each
一起使用,我们可以将9的列值更改为NA
lapply(List_of_DFs, function(x) x %>%
mutate_each(funs(replace(., .==9, NA))))