If you are going to convert a column from character to POSIXct, I would assume that you would do it this way and get the results that you want:
> x <- data.frame(times = c('2012-08-14 12:00', '2011-01-04 08:00', 'b') + , stringsAsFactors = FALSE + ) > x times 1 2012-08-14 12:00 2 2011-01-04 08:00 3 b > x$newtime <- as.POSIXct(x$times, format = "%Y-%m-%d %H:%M") > x times newtime 1 2012-08-14 12:00 2012-08-14 12:00:00 2 2011-01-04 08:00 2011-01-04 08:00:00 3 b <NA> > is.na(x$newtime) [1] FALSE FALSE TRUE > On Fri, Aug 24, 2012 at 2:26 PM, Alexander Shenkin <ashen...@ufl.edu> wrote: > Thanks for your reply, Jim. > > On 8/24/2012 12:14 PM, jim holtman wrote: >> I think your first problem is the coersion done by 'c' when you are >> mixing objects of various types: you have POSIXct and character. > > Yes, that's something I may have confounded. Still, the warning I'm > getting is "In as.POSIXlt.POSIXct(x, tz) : NAs introduced by coercion". > I'm not sure how c()'s coercion works - the warning seems to indicate > that c() is finding as.POSIXct. That's strange though, since I would > expect to get an error in that case, not just a warning: > >> as.POSIXct("b") > Error in as.POSIXlt.character(x, tz, ...) : > character string is not in a standard unambiguous format > >> What were your expections? > > I was expecting that the NA resulting from the coercion would result in > a TRUE value when being operated on by is.na(). Instead, I got: > >> is.na(date_vec[4]) > [1] FALSE > >>> x <- Sys.time() >>> str(x) >> POSIXct[1:1], format: "2012-08-24 13:12:31" >>> y <- c(x, 'b') >>> str(y) >> POSIXct[1:2], format: "2012-08-24 13:12:31" NA >> Warning message: >> In as.POSIXlt.POSIXct(x, tz) : NAs introduced by coercion >>> dput(y) >> structure(c("1345828351.75", "b"), class = c("POSIXct", "POSIXt" >> )) >>> >> >> Look at the 'dput' and see that what it is trying to do is to use the >> numeric value changed to a character string as a POSIXct value. So I >> am not surprised by the error since it is probably not what you >> wanted. Did you intend to use 'list' instead of 'c'? > > I'm a bit confused about how you get that from dput. Here's what I see: > >> dput(date_vec) > structure(c("1345831833", "1345831834", NA, "b"), class = c("POSIXct", > "POSIXt")) > > Regardless, I do get the same strange is.na() behavior from the following: > >> bad_date = "b" >> class(bad_date) = "POSIXct" >> bad_date > [1] NA > Warning message: > In as.POSIXlt.POSIXct(x, tz) : NAs introduced by coercion >> is.na(bad_date) # shouldn't this be TRUE? > [1] FALSE > > As nasty as it may be, shouldn't something showing up as "NA" result in > TRUE when being tested by is.na()? > > Just to put some context around this, I was investigating this issue as > I was thinking about converting dataframe columns to dates, and > detecting errors in that conversion. > > thanks, > Allie > >> >> On Fri, Aug 24, 2012 at 9:47 AM, Alexander Shenkin <ashen...@ufl.edu> wrote: >>> Hello folks, >>> >>> I found a strangeness while experimenting with POSIXct vectors and >>> lists. It seems that coerced NA's aren't "real" NAs, at least as >>> considered by is.na()? >>> >>>> date_vec = c(as.POSIXct(now()), as.POSIXct(now()+1),NA,"b") >>>> date_vec >>> [1] "2012-08-22 15:00:46 COT" "2012-08-22 15:00:47 COT" NA >>> >>> [4] NA >>> Warning message: >>> In as.POSIXlt.POSIXct(x, tz) : NAs introduced by coercion >>>> date_vec[4] >>> [1] NA >>> Warning message: >>> In as.POSIXlt.POSIXct(x, tz) : NAs introduced by coercion >>>> is.na(date_vec[4]) >>> [1] FALSE >>>> is.na(date_vec[3]) >>> [1] TRUE >>>> is.POSIXct(date_vec[4]) >>> [1] TRUE > -- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it. ______________________________________________ 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.