[R] Error in as.xts

Rui Barradas ruipbarradas at sapo.pt
Mon Jul 16 22:07:32 CEST 2012


Hello,

You'll never get a df with 97 rows with that dataset. Just look.
(The last dive_id is 97 but it starts at 62, not at 1.)

dat <- read.csv("diveData_2009.csv", header=TRUE, stringsAsFactors=FALSE)
#
DateTime <- with(dat, paste(date, time))
DateTime <- as.POSIXct(DateTime, format="%m/%d/%Y %H:%M")
diveData_2009 <- xts(dat ,order.by=DateTime)

# Result shall not have 97 rows
uinx_2009 <- unique(as.character(index(diveData_2009)))
length(uinx_2009) # 27
uid_2009 <- unique(diveData_2009$dive_id)
length(uid_2009) # 36

# A solution
fun <- function(x){
	dd <- with(x, paste(date[1], time[1]))
	dd <- as.POSIXct(dd, format = "%m/%d/%Y %H:%M")
	id <- x$dive_id[1]
	tt <- x$TRANSECT[1]
	data.frame(dive_id=id, timestamp=dd, TRANSECT=tt)
}
bb <- by(dat, dat$dive_id, FUN = fun)
diveCond_2009 <- do.call(rbind, bb)


Then add columns to this result:

diveCond_2009$r_wvht <- 0

Etc.

Rui Barradas

Em 16-07-2012 19:46, Yolande Tra escreveu:
> Yes the error happens for the 2009 file (attached). The dive_id in
> diveCond stops at dive_id=88 even though the last dive_id in 2009 file
> is dive_id=97
> diveCond <- data.frame(matrix(0, nrow=97, ncol=17))
> names(diveCond) <- c("dive_id", "timestamp", "visability", "r_wvht",
> "r_dpd", "r_apt", "r_mwd", "r_wtmp", "l_salinity", "l_o2", "l_hs",
> "l_tp", "l_wdir", "l_along", "l_cross", "l_mab", "l_depth")
> dive_id <- 0
> for(i in unique(as.character(index(diveData_2008)))){
>   dive_id <- dive_id+1
>
>   diveCond$dive_id[dive_id] <- dive_id
>   diveCond$timestamp[dive_id] <- as.character(i)
>   diveCond$visability[dive_id] <- as.numeric(diveData_2008[i][1,11])
>
> }
> for(i in unique(as.character(index(diveData_2009)))){
>   dive_id <- dive_id+1
>
>   diveCond$dive_id[dive_id] <- dive_id
>   diveCond$timestamp[dive_id] <- as.character(i)
>   diveCond$visability[dive_id] <- as.numeric(diveData_2009[i][1,11])
>
> }
>
>
> On Mon, Jul 16, 2012 at 2:32 PM, Rui Barradas <ruipbarradas at sapo.pt
> <mailto:ruipbarradas at sapo.pt>> wrote:
>
>     Hello,
>
>     I couldn't reproduce your error, with the csv file, your code run at
>     the first try. Here is exactly what I've done
>
>
>
>     dat <- read.csv("diveData_2008.csv", header=TRUE,
>     stringsAsFactors=FALSE)
>
>     # This 'DateTime' will be used again later.
>     DateTime <- with(dat, paste(date, time))
>     DateTime <- as.POSIXct(DateTime, format="%m/%d/%Y %H:%M")
>
>     # Create the xts object, slightly different, [ not as.xts() ]
>     diveData_2008 <- xts(dat ,order.by <http://order.by/>=DateTime)
>
>     # Your code
>
>     diveCond <- data.frame(matrix(0, nrow=61, ncol=17))
>     names(diveCond) <- c("dive_id", "timestamp", "visability", "r_wvht",
>              "r_dpd", "r_apt", "r_mwd", "r_wtmp", "l_salinity", "l_o2",
>              "l_hs", "l_tp", "l_wdir", "l_along", "l_cross", "l_mab",
>              "l_depth")
>     dive_id <- 0
>
>     for(i in unique(as.character(index(__diveData_2008)))){
>          dive_id <- dive_id+1
>          diveCond$dive_id[dive_id] <- dive_id
>          diveCond$timestamp[dive_id] <- as.character(i)
>          diveCond$visability[dive_id] <-
>     as.numeric(diveData_2008[i][1,__11])
>     }
>
>     # See ?aggregate and note that the function is
>     # is FUN = `[`with further args 1 (the dots '...')
>     # to extract the first row in each sub-df
>     aggr <- aggregate(TRANSECT ~ index(diveData_2008), data =
>     diveData_2008, `[`, 1)
>     names(aggr)[1] <- "timestamp"
>     merge(data.frame(timestamp=__unique(DateTime)), aggr, all.x=TRUE)
>
>
>     The output of this merge() is similar to your diveCond, but with
>     much less columns, it only has the columns with values different
>     from zero.
>
>     The aggregate alone wouldn't include the <NA> value, only the ones
>     with an actual timestamp.
>
>     Anyway, there was no error in the creation of diveCond. This leads
>     me to the final note. If something is going wrong break the
>     instructions nto smaller simpler ones. See, for instance, how I've
>     broken the DateTime variable, without putting everything in the
>     as.POSIXct, just the end value after paste. Though the possible
>     error wasn't there, it's allways better to debug simpler code, EVEN
>     if at the cost of making longer, with more lines.
>
>
>     Hope this helps,
>
>     Rui Barradas
>
>     Em 16-07-2012 15:27, Yolande Tra escreveu:
>
>         Hello,
>
>         Can I ask you another question? Attached is the file created from
>         as.xts. After submitting the following code, I got an error. Please
>         help. Thanks.
>
>         diveCond <- data.frame(matrix(0, nrow=61, ncol=17))
>
>         names(diveCond) <- c("dive_id", "timestamp", "visability", "r_wvht",
>         "r_dpd", "r_apt", "r_mwd", "r_wtmp", "l_salinity", "l_o2", "l_hs",
>         "l_tp", "l_wdir", "l_along", "l_cross", "l_mab", "l_depth")
>
>         dive_id <- 0
>
>         for(i in unique(as.character(index(__diveData_2008)))){
>
>         dive_id <- dive_id+1
>
>         diveCond$dive_id[dive_id] <- dive_id
>
>         diveCond$timestamp[dive_id] <- as.character(i)
>
>         diveCond$visability[dive_id] <- as.numeric(diveData_2008[i][1,__11])
>
>         }
>
>         Error in if (length(c(year, month, day, hour, min, sec)) == 6 &&
>         c(year,:
>
>         missing value where TRUE/FALSE needed
>
>         In addition: Warning messages:
>
>         1: In as_numeric(YYYY) : NAs introduced by coercion
>
>         2: In as_numeric(YYYY) : NAs introduced by coercion
>
>         Thanks,
>
>         Yolande
>
>
>
>         On Mon, Jul 16, 2012 at 2:51 AM, Rui Barradas
>         <ruipbarradas at sapo.pt <mailto:ruipbarradas at sapo.pt>
>         <mailto:ruipbarradas at sapo.pt <mailto:ruipbarradas at sapo.pt>>> wrote:
>
>              Hello,
>
>              I can see several things that are not right or may go wrong.
>              (Without an actual dataset, this is just a series of hints.)
>
>              1. The read.csv statement. Like read.table, it creates a
>         data.frame,
>              which defaults to reading strings as factors, coded
>         internally as
>              integers. Sometimes there are problems, when using them and
>         you are
>              converting the dates/times to POSIXct. You can try to use
>         read.csv
>              option
>
>              stringsAsFactors = FALSE
>
>              and then do the conversions. These conversions would include
>              converting 'species' and 'site' to factor, if you want them
>         as factors.
>
>              2. Are there typos in your posted code example?
>              2.a) You read into data.frame 'd1' but then use d$date and
>         d$TIME.
>              2.b) In 'd1' the column is named 'time', not 'TIME'.
>
>              3. Try to create the date/time and assign it to a variable, for
>              instance,
>
>              dtvar <- as.POSIXct(...etc...)
>
>              Now you can check length(dtvar) and NROW(d1) to see if they are
>              equal. You can also see if the conversion was allright.
>         This is a
>              general rule: if there's an error in a complicated instruction,
>              break it into smaller ones.
>
>              Hope this helps,
>
>              Rui Barradas
>
>              Em 16-07-2012 03:10, Yolande Tra escreveu:
>
>                  Hi
>                  I got the following error using as.xts
>                  Error in xts(x, order.by <http://order.by/>
>         <http://order.by/> = order.by <http://order.by/>
>                  <http://order.by/>, frequency = frequency, ...) :
>                      NROW(x) must match length(order.by
>         <http://order.by/> <http://order.by/>)
>
>                  Here is how the data looks like
>
>                      d1 <-
>
>         read.csv(file.path(dataDir,"____AppendixA-FishCountsTable-____2009.csv"),
>
>         as.is <http://as.is/> <http://as.is/>=T)
>
>                      d1[1:3,]
>
>                      dive_id       date  time      species count size
>           site
>                  depth level
>                  TRANSECT VIS_M
>                  1      62 10/12/2009 12:44 E. lateralis     2   15
>         Hopkins    15
>                       B
>                       1     4
>                  2      62 10/12/2009 12:44 E. lateralis     1   22
>         Hopkins    15
>                       B
>                       1     4
>                  3      62 10/12/2009 12:44 E. lateralis     1   25
>         Hopkins    15
>                       B
>                       1     4
>
>                      diveData_2009 <- as.xts( d1,order.by <http://order.by/>
>
>         <http://order.by/>=as.POSIXct(____strptime(paste(d$date,
>
>
>                  d$TIME ), "%d/%m/%Y %H:%M") ))
>                  Error in xts(x, order.by <http://order.by/>
>         <http://order.by/> = order.by <http://order.by/>
>                  <http://order.by/>, frequency = frequency, ...) :
>                      NROW(x) must match length(order.by
>         <http://order.by/> <http://order.by/>)
>
>
>                  I could not figure out how to correct it
>                  Thank you for your help
>                  Yolande
>
>                           [[alternative HTML version deleted]]
>
>                  __________________________________________________
>         R-help at r-project.org <mailto:R-help at r-project.org>
>         <mailto:R-help at r-project.org <mailto:R-help at r-project.org>>
>         mailing list
>         https://stat.ethz.ch/mailman/____listinfo/r-help
>         <https://stat.ethz.ch/mailman/__listinfo/r-help>
>                  <https://stat.ethz.ch/mailman/__listinfo/r-help
>         <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>
>                  <http://www.r-project.org/__posting-guide.html
>         <http://www.r-project.org/posting-guide.html>>
>
>                  and provide commented, minimal, self-contained,
>         reproducible code.
>
>
>
>
>



More information about the R-help mailing list