【问题标题】:How to subset assign values in a list of data.frames如何对 data.frames 列表中的值进行子集分配
【发布时间】:2016-12-03 14:25:09
【问题描述】:

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

【问题讨论】:

    标签: r list dataframe subset lapply


    【解决方案1】:

    我们需要返回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))))
    

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2013-11-26
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2019-09-13
      • 1970-01-01
      相关资源
      最近更新 更多