2017-04-25 89 views
0

一起使用我試圖清理使用同一個函數重複存儲在多個數據框中的一些數據。我試圖在此示例中利用dplyr中的mutate_atDate格式轉換爲包含'date'的所有列名稱。sapply與dplyr的mutate_at

我有表的列表在我的環境,如:

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')

但是,如果我用sapplyresults <- sapply(table_list, fix_dates)然後我會在results列表中找到所有從table_list在各自的索引的表。不過,我想,而不是有table_1 <- fix_dates('table_1'),而不是爲每個table_list

的要素之一是有可能有sapply存儲結果就地呢?

回答

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()) 
+0

對不起,在接受你的答案,因爲我是旅遊的延遲。你的答案完美無缺。這個'list2env()'函數對我來說是未知的,它非常有用! – Olivier