2017-09-12 7 views
0

1年のすべての祝日を含む "ファイルA"というCSVファイルがあります。私はまた、POSIXltクラスの日付を含む列を持つ、いくつかのデータを含む非常に大きなcsvファイルを持っています。最後の1つは「ファイルB」大規模なデータフレームで休日となる日を検索する - 巨大なランタイム

問題は、ファイルBのどの日付が休日であるかを確認するにはどうすればいいですか?あなたはそれを理解することができますので、私は、環境を整理してみましょう:

は年 のすべての休日を含んでおり、DFが原料の束を含むデータフレームであると仮定したオブジェクト休日と仮定します。しかし、DFさかのぼり列は、そのイベントの発生

私はisHolidayとして実装され、次のような機能とコード

b <- df$dates 
z <- lapply(b, isHoliday) 

を使用していた問題を解決する方法の日付が含まれています

isHoliday<- function(var){ 
return (any(holidays == as.Date(var)) ) #remember: var is on POSIXlt 
} 

これは、df $ datesの要素数が少ない場合に機能します。しかし、私のDFには300万行近くあります。そして、15分後、リターンはなかった。

そのため、私は再び

どのように私は日付が休日である見ることができますを尋ねますか?

+0

あなたが探している出力は、「b」と同じ長さの論理ベクトルの後ですか? –

+0

はい、それを紛失して申し訳ありません。私が望む出力は、bと同じ長さの論理的なベクトルなので、ベクトルを別の列としてバインドすることができます – Homunculus

+1

再現可能な例を提供する必要があります。 POSIXltをPOSIXctで置き換え、data.tableを使用して両方のデータセットをマージします。 – agstudy

答えて

3

lapplyを使用しないでください - あなたは基本的にしたい:bのすべての単一の値を超えるlapplyがループしながら

as.Date(b) %in% holidays 
as.Dateany length(b)回実行し、このコードは一度 as.Dateを実行し、すべて行います %in%を使用してベクトル化されコンパイルされたコードでの比較

==を使用すると、左手側がリサイクルされるため、間違っています。たとえば、

1:2 == c(1:2,2:1) 
#[1] TRUE TRUE FALSE FALSE 
関連する問題