【问题标题】:Running the same code for many tibbles in the global environment in R在 R 的全局环境中为许多 tibbles 运行相同的代码
【发布时间】:2022-01-24 04:32:04
【问题描述】:

我正在与 R 合作。

我有很多看起来与此相似的小标题(我之所以说相似,是因为它们在开头包含 5 列,在开头包含 11 列,需要删除)

chair   table  hill  block  chain  ball  money house

  2       4     5      6      7     -2     4     5 
  1       3     6      1      8      3     9     1
 -2       1     1     -2      1      8    -2     3
  6       4    -2      4     -2      5     8     4
  5       5     5      5      3      2     6     7 

首先,我需要在 tibble 的开头和结尾删除我不需要的列。所以,我使用了这段代码。

dummy1 <- at01 %>% 
  select(-1, -2, -3, -4, -5, -name, -time, -id, -class,
         -slot, -bracket, -app, -aal, -PHT, -END,
         -START) 

然后,我需要通过使用此代码消除列名的前 4 个字符来重命名列。

names(dummy1) <- substring(names(dummy1), 5)

最后,我需要用 NA 替换所有的 -2

dummy1[dummy1 == -2] <- NA

我的全局环境中有 120 个文档。如何传递所有代码以快速获得干净的结果,而无需对每个 tibble 执行这三个步骤。

谢谢

【问题讨论】:

    标签: r


    【解决方案1】:

    将相同的函数应用于多个数据帧时,最容易在列表中使用它们,这样您就可以使用来自applypurrr 的函数。在这里,我假设您的全局环境中只有 120 个数据帧。我首先将您全局环境中的所有数据框放入一个列表中。然后,我们可以在每个数据帧上应用你的各种函数(我把它们都放在一个函数中)来清理它们。然后,您可以使用 purrr::map 将该函数应用于每个数据帧。

    library(tidyverse)
    
    # Put all dataframes in your global environment into a list.
    dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))
    
    cleanup <- function(x){
      x <- x %>% 
        select(-c(1:5, name, time, id, class,
               slot, bracket, app, aal, PHT, END,
               START)) %>% 
        mutate_all(~replace(., . == -2, NA))
      
      names(x) <- substring(names(x), 5)
      return(x)
    }
    
    dfs_cleanedup <- purrr::map(dfs, cleanup)
    

    然后,如果您想用清理后的数据帧覆盖全局环境中的 120 个数据帧,那么您可以执行以下操作(注意:它将覆盖全局环境中的数据帧)。

    list2env(dfs_cleanedup, envir = .GlobalEnv)
    

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2018-10-27
      相关资源
      最近更新 更多