2014-11-25 5 views
1

46 개의 변수를 2107377 회 관찰 한 대형 데이터 프레임이 있습니다. 이 날을 기준으로이 데이터 프레임을 부분 집합하는 함수가 있습니다.하위 집합()을 사용하여 코드 효율성 향상

subset.function = function(dataset,year,focal.year,day.of.year) { 
    subset(dataset, year==focal.year & day.of.year<=ifelse(leap_year(focal.year), 112,111)) 
} 

데이터는 2004-2014 년에 수집되었습니다. 이 데이터 프레임에서 각각 11 개의 데이터 프레임을 만들고 싶습니다. 각 데이터는 초점 연도 (초점 연도 = 2004, 2005, 2006 등)의 처음 111 (또는 윤년 중 112) 일과 관련된 모든 데이터로 구성됩니다.).

나는 내 일부 기능 11 시간, 새로운 변수에 저장 될 때마다 적용하여이 작업을 수행 할 수 있습니다 :

variable1 = subset.function(dataset, year, 2004, day.of.year) 
variable2 = subset.function(dataset, year, 2005, day.of.year) 
... 
variable11 = subset.function(dataset, year, 2011, day.of.year), 

을하지만 매우 재미 아니다. 나는 더 적은 선으로이 작업을 수행하는 루프를 사용하려했지만, 그것은 작동하지 않습니다

test = vector("list") 
for (i in 1:years) { 
    test[[i]] = subset.function(dataset, year, focal.year[i], day.of.year) 
} 

이 원본과 목록의 각 항목의 요소와 동일한 수의 큰 목록을 만듭니다 데이터 프레임. 또한 기능의 apply 제품군을 사용하여 시도했다 :

apply(dataset, year, focal.year[1:11], day.of.year) 

을 똑같이 실망스러운 결과. 내가 뭘 놓치고 있니?

+2

완전히 관련 그러나 읽기 http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – user20650

+0

'split' 여기에 옵션이 될 수있는 가치가있을 수도 없음 – user20650

답변

1

@ user20650 링크를 이용해 주셔서 감사합니다. 나는 subset가 꿀벌 무릎이라고 생각했지만 어떤 조건에서는 아주 이상한 행동을합니다.

for 루프를 사용하여 하위 집합에 대한 호출을 제거하면 정상적으로 작동합니다!

test = vector("list") 
for (i in 1:years) { 
    test[[i]] = data[data$year == timeframe[i] & data$doy >= ifelse(leap_year(timeframe[i]), 112, 111),] 
} 
관련 문제