2011-07-06 2 views
1

데이터 프레임 목록에 함수를 적용 할 때 까다로운 문제가 있습니다. 궁극적으로 저는 마약 사용 수치의 대용량 데이터 세트에 대한 개별 시계열 차트를 그려보고 싶습니다.조건부 테스트 후 목록의 데이터 프레임에서 여러 개의 플롯

내 데이터 세트는 5 년 동안 매월 수집 된 사용률의 30 가지 항생제로 구성됩니다. 그것은 3 열과 1692 행이 있습니다.

지금까지 각 항생제 클래스에 대한 개별 데이터 프레임 목록을 만들었습니다. (리스트의 이름은 약물이며 drug.class는 원래의 데이터 프레임으로부터 약품 이름의 문자 벡터이다)

drugList <- list() 
n<-length(drug.class) 
for (i in 1:n){ 
    drugList[[i]] <-AB[Drug==(drug.class[i]),] 
} 

예를 들어, I는 다음 열이리스트에서 30 개의 데이터 프레임을 가지고

[[29]] 
      Drug Usage  DateA 
1353 Tobramycin 5.06 01-Jan-2006 
1354 Tobramycin 4.21 01-Feb-2006 
1355 Tobramycin 6.34 01-Mar-2006 
. 
. 
. 
      Drug Usage  DateA 
678 Vancomycin 11.62 01-Jan-2006 
679 Vancomycin 11.94 01-Feb-2006 
680 Vancomycin 14.29 01-Mar-2006 

각 플롯이 작성되기 전에 논리 테스트가 수행되어 시계열이 자동 상관되는지를 결정합니다. 목록에있는 데이터 프레임은 매우 길다. 다음과 같이 내가 테스트를 수행하는 함수를 작성했습니다 : 나는 이전에 개별 데이터 프레임에 내 모든 기능을 테스트 한

acTest <- function(){ 
    id<-ts(1:length(DateA)) 
    a1<-ts(Usage) 
    a2<-lag(a1-1) 
    tg<-ts.union(a1,id,a2) 
    mg<-lm(a1~a2+bs(id,df=3), data=tg) 
    a2Pval <- summary(mg)$coefficients[2, 4] 
    if (a2Pval<=0.05) { 
     TRUE 
    } else { 
     FALSE 
    } 
} 

예상대로 그들이 작동합니다.

저는 마약 목록의 각 데이터 프레임에 테스트를 적용하는 방법을 연구하고 있습니다. 나는이 일을 돕는 도움을받을 수 있다면 같은 방식으로 시계열 함수를 적용 할 수있는 위치에있을 것이라고 믿는다.

제공되는 지원에 대해 미리 감사드립니다.

답변

1

몇 가지 제안 : 실제로 매개 변수로 data.frame을 허용하도록

당신의 acTest 기능을 변경

. 그렇지 않으면 전역 환경에서 DateA 및 Usage라는 개체를 찾고 수정하는 기능에 많은 문제가 있습니다. 목록의 각 요소에 함수를 적용

acTest <- function(dat){ 
    id<-ts(1:length(dat$DateA)) 
    a1<-ts(dat$Usage) 
    a2<-lag(a1-1) 
    tg<-ts.union(a1,id,a2) 
    mg<-lm(a1~a2+bs(id,df=3), data=tg) 
    a2Pval <- summary(mg)$coefficients[2, 4] 
    if (a2Pval<=0.05) { 
     TRUE 
    } else { 
     FALSE 
    } 
} 

lapply를 사용하여 수행 그것은이다 R.의 일반적인 작업 (대부분)입니다.

lapply(drugList,FUN=acTest) 

마지막으로, 하나 개의 변수를 이용하여 데이터 프레임을 분할 (다른 사람들) ddply 같은 도구를 사용하여 별도의리스트 엘리먼트로서, 각각의 데이터 프레임을 저장하지 않고 이와 같은 작업을 수행 할 수 있으며, 각 조각에 함수를 적용 다시 단일 데이터 프레임으로 재구성하십시오. 귀하의 경우 그 모양은 다음과 같습니다.

ddply(AB,.(Drug),.fun = acTest) 
+0

감사합니다. 완벽하게 작동합니다. – John

관련 문제