Below is some Weather Service data. I would like to parse the forecast date field into four different columns: Year Month Day Hour I would like to drop the final four zeros. Any suggestions? forecast.date levels lon lat HGT RH TMP UGRD VGRD 1 2020-08-01 12:00:00 1000 mb -113.130 33.6335 75.5519 49.6484 305.495 1.40155 2.23264 2 2020-08-01 12:00:00 1000 mb -113.111 33.5142 75.9582 51.0234 305.245 1.65155 2.23264 3 2020-08-01 12:00:00 1000 mb -113.092 33.3948 76.3957 52.7734 305.057 1.90155 2.23264 4 2020-08-01 12:00:00 1000 mb -112.987 33.6495 75.9269 49.1484 305.745 1.90155 2.04514 5 2020-08-01 12:00:00 1000 mb -112.968 33.5301 76.3019 50.2734 305.495 2.08905 1.98264 Philip Heinrich [[alternative HTML version deleted]]
If the forecast.date column is of type character you can use lubridate to do this:> library(lubridate) > a <- "2020-08-01 12:00:00" > year(a)# [1] 2020> month(a)# [1] 8 etc On Sun, Aug 2, 2020 at 7:24 PM Philip <herd_dog at cox.net> wrote:> Below is some Weather Service data. I would like to parse the forecast > date field into four different columns: > > Year > Month > Day > Hour > > I would like to drop the final four zeros. Any suggestions? > > forecast.date levels lon lat HGT > RH TMP UGRD VGRD > 1 2020-08-01 12:00:00 1000 mb -113.130 33.6335 75.5519 49.6484 305.495 > 1.40155 2.23264 > 2 2020-08-01 12:00:00 1000 mb -113.111 33.5142 75.9582 51.0234 305.245 > 1.65155 2.23264 > 3 2020-08-01 12:00:00 1000 mb -113.092 33.3948 76.3957 52.7734 305.057 > 1.90155 2.23264 > 4 2020-08-01 12:00:00 1000 mb -112.987 33.6495 75.9269 49.1484 305.745 > 1.90155 2.04514 > 5 2020-08-01 12:00:00 1000 mb -112.968 33.5301 76.3019 50.2734 305.495 > 2.08905 1.98264 > > Philip Heinrich > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >[[alternative HTML version deleted]]
Learn to post plain text and use dput to include data: dta <- structure(list(forecast.date = c("2020-08-01 12:00:00", "2020-08-01 12:00:00", "2020-08-01 12:00:00", "2020-08-01 12:00:00", "2020-08-01 12:00:00" ), levels = c("1000 mb", "1000 mb", "1000 mb", "1000 mb", "1000 mb" ), lon = c(-113.13, -113.111, -113.092, -112.987, -112.968), lat = c(33.6335, 33.5142, 33.3948, 33.6495, 33.5301), HGT = c(75.5519, 75.9582, 76.3957, 75.9269, 76.3019), RH = c(49.6484, 51.0234, 52.7734, 49.1484, 50.2734), TMP = c(305.495, 305.245, 305.057, 305.745, 305.495), UGRD = c(1.40155, 1.65155, 1.90155, 1.90155, 2.08905), VGRD = c(2.23264, 2.23264, 2.23264, 2.04514, 1.98264 )), .Names = c("forecast.date", "levels", "lon", "lat", "HGT", "RH", "TMP", "UGRD", "VGRD"), class = "data.frame", row.names = c(NA, -5L)) dta$Year <- as.integer( substr( dta$forecast.date, 1, 4 ) ) dta$Month <- as.integer( substr( dta$forecast.date, 6, 7 ) ) dta$Day <- as.integer( substr( dta$forecast.date, 9, 10 ) ) dta$Hour <- as.integer( substr( dta$forecast.date, 12, 13 ) ) dta On August 2, 2020 9:24:24 AM PDT, Philip <herd_dog at cox.net> wrote:>Below is some Weather Service data. I would like to parse the forecast >date field into four different columns: > > Year > Month > Day > Hour > >I would like to drop the final four zeros. Any suggestions? > >forecast.date levels lon lat HGT > RH TMP UGRD VGRD >1 2020-08-01 12:00:00 1000 mb -113.130 33.6335 75.5519 49.6484 305.495 >1.40155 2.23264 >2 2020-08-01 12:00:00 1000 mb -113.111 33.5142 75.9582 51.0234 305.245 >1.65155 2.23264 >3 2020-08-01 12:00:00 1000 mb -113.092 33.3948 76.3957 52.7734 305.057 >1.90155 2.23264 >4 2020-08-01 12:00:00 1000 mb -112.987 33.6495 75.9269 49.1484 305.745 >1.90155 2.04514 >5 2020-08-01 12:00:00 1000 mb -112.968 33.5301 76.3019 50.2734 305.495 >2.08905 1.98264 > >Philip Heinrich > > > > [[alternative HTML version deleted]] > >______________________________________________ >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >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.-- Sent from my phone. Please excuse my brevity.
On 2020-08-02 09:24 -0700, Philip wrote: | Below is some Weather Service data. I | would like to parse the forecast date | field into four different columns: | Year, Month, Day, Hour Dear Philip, I'm largely re-iterating Eric and Jeff's excellent solutions: > dat <- structure(list(forecast.date + c("2020-08-01 12:00:00", + "2020-08-01 12:00:00", + "2020-08-01 12:00:00", + "2020-08-01 12:00:00", + "2020-08-01 12:00:00" + ), TMP = c("305.495", "305.245", + "305.057", "305.745", "305.495" + )), row.names = c(NA, 5L), + class = "data.frame") > t(apply(simplify2array( + strsplit(dat$forecast.date, "-| |:")), + 2, as.numeric)) [,1] [,2] [,3] [,4] [,5] [,6] [1,] 2020 8 1 12 0 0 [2,] 2020 8 1 12 0 0 [3,] 2020 8 1 12 0 0 [4,] 2020 8 1 12 0 0 [5,] 2020 8 1 12 0 0 > simplify2array(parallel::mclapply(c( + lubridate::year, + lubridate::month, + lubridate::day, + lubridate::hour), function(FUN, x) { + FUN(x) + }, x=dat$forecast.date)) [,1] [,2] [,3] [,4] [1,] 2020 8 1 12 [2,] 2020 8 1 12 [3,] 2020 8 1 12 [4,] 2020 8 1 12 [5,] 2020 8 1 12 V r -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20200802/465df8ed/attachment.sig>
Hello, And another solution, taking advantage of Rasmus' one: simplify2array(parallel::mclapply(c( ? "%Y", ? "%m", ? "%d", ? "%H"), function(fmt, x) { ??? as.integer(format(as.POSIXct(x), format = fmt)) }, x = dta$forecast.date)) #???? [,1] [,2] [,3] [,4] #[1,] 2020??? 8??? 1?? 12 #[2,] 2020??? 8??? 1?? 12 #[3,] 2020??? 8??? 1?? 12 #[4,] 2020??? 8??? 1?? 12 #[5,] 2020??? 8??? 1?? 12 The data set dta is Jeff's, it's in dput format. Hope this helps, Rui Barradas ?s 18:26 de 02/08/2020, Rasmus Liland escreveu:> On 2020-08-02 09:24 -0700, Philip wrote: > | Below is some Weather Service data. I > | would like to parse the forecast date > | field into four different columns: > | Year, Month, Day, Hour > > Dear Philip, > > I'm largely re-iterating Eric and Jeff's > excellent solutions: > > > dat <- structure(list(forecast.date > + c("2020-08-01 12:00:00", > + "2020-08-01 12:00:00", > + "2020-08-01 12:00:00", > + "2020-08-01 12:00:00", > + "2020-08-01 12:00:00" > + ), TMP = c("305.495", "305.245", > + "305.057", "305.745", "305.495" > + )), row.names = c(NA, 5L), > + class = "data.frame") > > t(apply(simplify2array( > + strsplit(dat$forecast.date, "-| |:")), > + 2, as.numeric)) > [,1] [,2] [,3] [,4] [,5] [,6] > [1,] 2020 8 1 12 0 0 > [2,] 2020 8 1 12 0 0 > [3,] 2020 8 1 12 0 0 > [4,] 2020 8 1 12 0 0 > [5,] 2020 8 1 12 0 0 > > simplify2array(parallel::mclapply(c( > + lubridate::year, > + lubridate::month, > + lubridate::day, > + lubridate::hour), function(FUN, x) { > + FUN(x) > + }, x=dat$forecast.date)) > [,1] [,2] [,3] [,4] > [1,] 2020 8 1 12 > [2,] 2020 8 1 12 > [3,] 2020 8 1 12 > [4,] 2020 8 1 12 > [5,] 2020 8 1 12 > > V > > r > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.-- Este e-mail foi verificado em termos de v?rus pelo software antiv?rus Avast. https://www.avast.com/antivirus [[alternative HTML version deleted]]