Try this:

DS <- structure(list(anomaly = c(-27.3, 14.4, 29, -38.1, -3.4, 55.1,
-1, 21.9, -10.9, -7.8, -48.2, -44.9, -43.8, -10.3, 44.2, -0.5,
96.7, -32, -0.2, -38.6, 73.6, -17.5, -57.8, 10.7, -33.4, 46.1,
26.7, -37.3, 1.2, 36.3, 39.6, 31), prev6mon = c(NA, NA, NA, NA,
NA, 29.7, 56, 63.5, 23.6, 53.9, 9.1, -91, -133.8, -166, -110.8,
-103.5, 41.4, 54.3, 97.9, 69.6, 99.1, 82.1, -72.4, -29.7, -62.9,
21.7, -25.2, -45.1, 14, 39.6, 112.7, 97.6), DSI = c(NA, NA, NA,
NA, NA, NA, 0, 0, 0, 0, 0, -48.17, -93.08, -136.93, -147.21,
-102.98, -103.47, 0, 0, 0, 0, 0, -17.47, -75.29, -64.57, -98.01,
0, 0, 0, 0, 0, 0), DSIadj = c(NA, NA, NA, NA, NA, NA, 0, 0, 0,
0, 0, 0.06, 0.12, 0.17, 0.18, 0.13, 0.13, 0, 0, 0, 0, 0, 0.02,
0.09, 0.08, 0.12, 0, 0, 0, 0, 0, 0), DSIpct = c(NA, NA, NA, NA,
NA, NA, 0, 0, 0, 0, 0, 6.02, 11.64, 17.12, 18.4, 12.87, 12.94,
0, 0, 0, 0, 0, 2.18, 9.41, 8.07, 12.25, 0, 0, 0, 0, 0, 0), Month =
structure(c(5L,
4L, 8L, 1L, 9L, 7L, 6L, 2L, 12L, 11L, 10L, 3L, 5L, 4L, 8L, 1L,
9L, 7L, 6L, 2L, 12L, 11L, 10L, 3L, 5L, 4L, 8L, 1L, 9L, 7L, 6L,
2L), .Label = c("April ", "Aug ", "Dec ", "Feb ", "Jan", "July ",
"June ", "March ", "May ", "Nov ", "October ", "Sept "), class = "factor"),
   Yr = c(1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
   1980L, 1980L, 1980L, 1981L, 1981L, 1981L, 1981L, 1981L, 1981L,
   1981L, 1981L, 1981L, 1981L, 1981L, 1981L, 1981L, 1982L, 1982L,
   1982L, 1982L, 1982L, 1982L, 1982L, 1982L)), .Names = c("anomaly",
"prev6mon", "DSI", "DSIadj", "DSIpct", "Month", "Yr"), class = "data.frame",
row.names = c(NA,
-32L))
DS  # original data
# now only use the first column of data and construct columns B & C
# fill in the 'prev6mon' column using filter and zero the DSI column
DS$prev6mon <- filter(DS$anomaly, rep(1,6), side=1)
DS$DSI <- 0
# iterate since you have to refer to a previous value
for (i in 7:nrow(DS)){
    DS$DSI[i] <- with(DS, {
        if (DSI[i - 1] < 0) {
            if (prev6mon[i - 1] < 0) DSI[i - 1] + anomaly[i - 1]
            else 0
        }
        else {
            if (prev6mon[i] >= 0) 0
            else {
                if (anomaly[i - 1] >= 0) 0
                else anomaly[i - 1]
            }
        }
    })
}



On Sat, Jan 16, 2010 at 2:57 PM, Muhammad Rahiz <
muhammad.ra...@ouce.ox.ac.uk> wrote:

> Dear all,
>
> I'm trying to make an R code for the drought severity index (DSI) developed
> by Philips and McGregor (1998). You can refer to the description of the
> algorithm on page 19 from
> http://dissertations.port.ac.uk/229/01/MaloneS.pdf
>
> The code is given in Excel as the following and can be found on page 60
> from the same link.
>
> C7 =
> IF(C6<0,IF(@SUM(A6:A1)<0,C6+A6,"0"),
> IF(B7>=0,"0",IF(A6>=0,"0",A6)))
>
> Column A contains the raw anomaly data. Column B contains the 6month
> rolling sum and Column C contains the results of the conditional statement
> which in turn is recycled and input into the conditional statement.
>
> I translated the Excel formula into R, but without any success.
>
> x <- as.matrix(read.table("sample.txt")) # where sample.txt contains values
> of anomalies. See page 60
>
> ct <- 6         # sets a 6-month averaging sequence
> n  <- ct -1
> d <- matrix( ,32,1) # dummy file
>
> # User defined function
>  add <- function(x) Reduce("+", x)
>
> for (i in 1:32){
> ii <- i + n
> a <- i +1
>
> d[[a]] <-
>
> ifelse(d[ii] < 0 && add(x[c(i:ii)]) < 0, d[ii] + x[ii], ( # condition 1
> ifelse(add(x[c((i+1):(ii+1))]) >= 0, 0, ( # condition 2
> ifelse(x[ii] >=0,"0", x[ii]))))) # condition 3
> }
>
> The way I see it, this is the main problem.
>
> How do I make the data in Excel's Column C in R? Or in other words, how do
> I update the result of the conditional statements into the dummy file, d,
> which I created (which apparently didn't work).
>
> I hope my explanation makes sense.
>
> thanks.
>
>
> Muhammad
>
> --
> Muhammad Rahiz  |  Doctoral Student in Regional Climate Modeling
> Climate Research Laboratory, School of Geography & the Environment
> Oxford University Centre for the Environment, University of Oxford
> South Parks Road, Oxford, OX1 3QY, United Kingdom
> Tel: +44 (0)1865-285194  Mobile: +44 (0)7854-625974
> Email: muhammad.ra...@ouce.ox.ac.uk<mailto:muhammad.ra...@ouce.ox.ac.uk>
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to