2017-04-25 10 views
0

同じ機能を繰り返し使用して複数のデータフレームに保存されたデータをクリーンアップしようとしています。私はこの例では、'date'を含むすべての列名をDate形式に変換するために、dplyrからmutate_atを利用しようとしています。dplyrのmutate_atと組み合わせて使用​​する

私のような私の環境でのテーブルのリストを持っている:

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

私のための目的は、名前はその修正バージョンとtable_listに記載されているテーブルのそれぞれを上書きすることです。その代わりに、私は大きなリストに結果を格納することしかできません。

次のように私はこれまでの基本的な機能を作成しました:私は例fix_dates('table_1')のために一度それを一つの要素を養う場合

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

fix_dates()機能は完全に正常に動作します。私は、このようなresults <- sapply(table_list, fix_dates)としてsapplyを使用する場合

しかし、私はresultsリストに、それぞれの指標でtable_listからすべてのテーブルを検索します。しかし、私が代わりに代わりtable_list

の要素ごとにtable_1 <- fix_dates('table_1')がしたいことは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

関連する問題