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]]