与dplyr的mutate_at

时间:2017-04-25 15:39:24

标签: r dplyr apply

我正在尝试使用相同的功能重复清理存储在多个数据帧中的一些数据。我在此示例中尝试利用mutate_at中的dplyr转换为Date格式包含'date'的所有列名称。

我的环境中有一个表列表,例如:

table_list <- c('table_1','table_2','table_3')

我的目标是覆盖table_list中列出名称及其更正版本的每个表格。相反,我只能将结果存储在一个大的列表中。

到目前为止,我已经创建了一个基本功能如下:

fix_dates   <-  function(df_name){
  get(df_name) %>% 
     mutate_at(vars(contains('date')),
              funs(as.Date(.,
                    origin = "1899-12-30")
              ))
}

fix_dates()功能可以完美地运行,如果我一次只为fix_dates('table_1')提供一个元素。

但是,如果我使用sapply之类的results <- sapply(table_list, fix_dates),那么我会在results中找到table_list各个索引处的所有表格。不过,我希望代之以table_1 <- fix_dates('table_1')

的每个元素table_list

是否可以快速存储结果 就地

1 个答案:

答案 0 :(得分:2)

这可能是一种更优雅的方式,但我认为这可以让你到达目的地:

# use lapply to get a list with the transformed versions of the data frames
# named in table_list
new_tables <- lapply(table_list, function(x) {

   mutate_at(get(x), vars(contains("date")), funs(as.Date(., origin = "1899-12-30")))

})

# assign the original df names to the elements of that list
names(new_tables) <- table_list

# use list2env to put those list elements in the current environment, overwriting
# the ones that were there before
list2env(new_tables, envir = environment())