2017-09-12 2 views
0

나는 연말 연시에 "FILE A"라는 CSV 파일을 가지고 있습니다. 또한 POSIXlt 클래스의 날짜를 포함하는 열이있는 일부 데이터가 포함 된 꽤 큰 csv 파일이 있습니다. 마지막 하나는 "파일 B"입니다.대용량 데이터 프레임에서 어느 날이 휴일인지 찾기 - 거대한 런타임

질문 : 파일 B의 어떤 날짜가 공휴일입니까? 내가 환경을 마련하자, 그래서 당신은 그것을 이해할 수

객체 휴일는 올해 의 모든 공휴일을 포함한다고 가정하고 DF이 잔뜩 들어있는 dataframe이라고 가정하자. 그러나, 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는 3 백만 행에 가깝습니다. 그리고 15 분 후에는 돌아 오지 않았습니다.

다시 묻습니다.

휴일 인 날짜를 어떻게 확인할 수 있습니까?

+0

찾고있는 출력은 무엇이며, 'b'와 같은 길이의 논리 벡터를 뒤따라 왔습니까? –

+0

예, 미안합니다. 내가 원하는 출력은 논리 벡터, 즉 b와 길이가 같기 때문에 다른 열로 벡터를 바인딩 할 수 있습니다. – Homunculus

+1

재현 가능한 예제를 제공해야합니다. POSIXlt를 POSIXct로 대체하고, data.table을 사용하고 두 데이터 세트를 병합합니다. – agstudy

답변

3

lapply 사용하지 마십시오 - 당신은 기본적으로 원하는 : lapply 의지 b의 모든 단일 값을 통해 루프가 as.Dateanylength(b) 번 실행

as.Date(b) %in% holidays 

있지만,이 코드는 한 번 as.Date를 실행 한 다음 모든 할 %in%을 사용하여 벡터화 된 컴파일 된 코드의 비교

==을 사용하면 왼쪽면이 재활용되므로 올바르지 않습니다. 예 :

1:2 == c(1:2,2:1) 
#[1] TRUE TRUE FALSE FALSE 
관련 문제