我有一个数据帧列表,我想有条件地重新分配数据帧中的值。如果我只是分配给一个数据框架,我会说类似的话
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
循环和[[]]
子集运算符来实现这一点,但我认为一定有更好的方法。
如果这很有趣或相关,那么这个问题背后的动机是数据帧列表来自XLConnect,随后我将按行绑定数据帧,但我首先想在一列中删除一些应该都是数字的字符值,这样我就可以强制为数字,然后按行绑定。
我们需要返回x
来获取数据。帧
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))))