2013-07-22 1 views
-2

나는 country, year 및 tdvalue의 3 개의 열을 포함하는 하나의 데이터 세트를 가지고 있습니다. R breakpoint 함수를 사용하여 연도가 중단 점이면 더미 변수 (sd)를 1 또는 0으로 만들려면 국가별로 루프를 만들고 싶습니다. 그러나 내 코드 작업을 수행 할 때 내 sd 변수는 항상 0 인 반면, 몇 년 동안이 사실을 알고 있습니까?bp 함수로 반복 루핑

도움을 주셔서 감사합니다.

library(zoo) 
library(sandwich) 
library(strucchange) 
library(segmented) 
library(tree) 

tabo<-read.table("boucle.txt", header=T, sep="\t") 

Fonction.bp<-function(b) 
    bp.inf <- breakpoints(tabo$year ~ tabo$tradevaluein1000usd , tabo = tabo[b,], h = 8) 
    t<-breakdates(confint(bp.inf)) 
    for (i in 1:nrow(t)) { 
    res <- ifelse(tabo$year[b] == t[i,1] , 1, 0) 
    return(res) 
    } 
} 

numero<-1:nrow(tabo) 
tabo$sd<-lapply(tabo$code_o,Fonction.bp) 

데이터 샘플 : 여러 국가

code_o -origin -year -tradevaluein1000usd 

ABW Aruba 1988 375.059 
ABW Aruba 1989 3458.656 
ABW Aruba 1990 2924.484 
ABW Aruba 1991 140509.4 

dput (이 TaBO) : 당신이있어

structure(list(code_o = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), .Label = c("ABW", "AFG", "AGO"), class = "factor"), 
    origin = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Afghanistan", "Angola", 
    "Aruba"), class = "factor"), year = c(1988L, 1989L, 1990L, 
    1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 
    2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
    2009L, 2010L, 2011L, 2012L, 1988L, 1989L, 1990L, 1991L, 1992L, 
    1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 
    2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 
    2011L, 2012L, 1988L, 1989L, 1990L, 1991L, 1992L, 1993L, 1994L, 
    1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 
    2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L 
    ), tradevaluein1000usd = c(375.059, 3458.656, 2924.484, 140509.4, 
    326377, 548739.3, 570287.9, 673563.2, 809647.7, 1021996, 
    680243.7, 944974.8, 1950097, 1416807, 1055372, 1276015, 2503752, 
    3908081, 4294362, 4654180, 5523432, 2203173, 272596.5, 4450387, 
    127760.6, 121861.2, 125059.8, 134163.4, 115283.5, 82499.51, 
    68673.89, 97143.18, 104883.2, 124654.5, 155892.9, 167802.9, 
    137721, 153405.3, 99146.39, 103894.9, 190640.9, 209073.9, 
    264083.6, 254765.3, 408123.6, 507407, 1283451, 609946.1, 
    486418.4, 67638.02, 1112926, 3120863, 4082248, 3290223, 3796494, 
    3283747, 3175830, 3614761, 4669298, 4618304, 3501481, 4478671, 
    7878114, 6290144, 7344164, 8563406, 11900000, 20700000, 30200000, 
    39500000, 65700000, 38900000, 50600000, 59400000, 8839811 
    ), sd = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0)), .Names = c("code_o", "origin", "year", 
"tradevaluein1000usd", "sd"), row.names = c(NA, -75L), class = "data.frame") 
+0

문제를 쉽게 재현 할 수 있도록 데이터를 입력하거나 소스를 지정하십시오. – ricardo

+0

감사합니다. 지금 바로보세요. – aleeyah

+0

도움이 필요합니다. – aleeyah

답변

0

나쁜 코드.

당신은 사람들의 시간을 기대한다면, 당신은 에 더 많은 노력을해야한다

귀하의 기능이 작동하지 않습니다.이 이름에는 행이 없기 때문에 tabo['AGO',], tabo['AFG',]tabo['ABW',] 모두가 비어 있습니다. 내가 좋아하는 뭔가를 사용하여, 당신은 아마 데이터를 부분 집합 할 생각 : 우리가 코드 tabo = tabo[b,]를 포함하는 경우

tabo[tabo$code_o == 'AGO',] 
tabo[tabo$code_o == 'AFG',] 
tabo[tabo$code_o == 'ABW',] 

bp.inf 관계없이 동일합니다 - 당신은 글로벌 환경에서 상품 회귀를 호출하고 있습니다로, 데이터 프레임을 전달하지 마십시오 (data이 아닌 tabo). 이것이 혼란 스럽다면 ... 잊어 버리십시오.

결론은 줄에 몇 개의 오류가있어 중단 점을 찾는 것입니다. bp.inf <- breakpoints(year ~ tradevaluein1000usd, data = tabo[tabo$code_o == 'AGO',], h = 8)과 같은 것으로 변경해야합니다.

또한 기능이 {으로 열리지 않으므로 전혀 작동하지 않습니다.