如何在data.frames列表中分配值

时间:2016-07-29 01:29:13

标签: r list dataframe subset lapply

我有一个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,但我首先要删除一些字符值在一个应该全部为数字的列中,所以我可以强制转换为数字,然后按行绑定。

1 个答案:

答案 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))

如果我们将dplyrmutate_each一起使用,我们可以将9的列值更改为NA

lapply(List_of_DFs, function(x) x %>%
                                  mutate_each(funs(replace(., .==9, NA))))