[R] Problem with converting grib file to excel

CALUM POLWART po|c1410 @end|ng |rom gm@||@com
Thu Sep 26 00:24:16 CEST 2024


Noticeable lack of silence in the group on this one.

I've not got time to test currently. But my experience of geo location
files - they often had more than 2 dimensional data. In other words you
might have a boundary of a region as an object with long and lat for maybe
100 data points making up the region. So 200 pieces of data. All held as a
list or something similar in a single "cell" as excel would refer to it.

My gut feeling is that's likely to make export to excel difficult without
data carpentry first?

On Tue, 24 Sep 2024, 21:26 Bert Gunter, <bgunter.4567 using gmail.com> wrote:

> You might try posting on r-sig-geo if you don't get a satisfactory
> response here. I assume there's a lot of expertise there on handling
> raster-type data.
>
> Cheers,
> Bert
>
> On Mon, Sep 23, 2024 at 11:31 PM javad bayat <j.bayat194 using gmail.com> wrote:
> >
> > Dear R users;
> > I have downloaded a grib file format (Met.grib) and I want to export its
> > data to excel file. Also I want to do some mathematic on some columns.
> But
> > I got error. I would be more than happy if anyone can help me to do
> this. I
> > have provided the codes and the Met.grib file in this email.
> > Sincerely yours
> >
> > # Load the necessary libraries
> > >  library(raster)      # For reading GRIB files
> > >  library(dplyr)       # For data manipulation
> > >  library(lubridate)   # For date manipulation
> > >  library(openxlsx)    # For writing Excel files
> >
> > # Specify the file paths
> > >  grib_file_path <- "C:/Users/Omrab_Lab/Downloads/Met.grib"
> > >  excel_file_path <- "C:/Users/Omrab_Lab/Downloads/Met_updated.xlsx"
> >
> > # Open the GRIB file
> > >  raster_data <- stack(grib_file_path)
> >
> > # Check the names of the layers to identify which ones to extract
> > >  layer_names <- names(raster_data)
> > > print(layer_names)  # Prints
> >
> >
> > > # Extract layers based on layer names - adjust as necessary
> > > t2m <- raster_data[[grep("t2m", layer_names)]]
> > > d2m <- raster_data[[grep("d2m", layer_names)]]
> > > tcc <- raster_data[[grep("tcc", layer_names)]]
> > > valid_time <- raster_data[[grep("valid_time", layer_names)]]
> > > t2m
> > class      : RasterStack
> > nlayers    : 0
> >
> > > # Check if the raster layers are loaded correctly
> > > if (is.null(t2m) || is.null(d2m) || is.null(tcc) ||
> is.null(valid_time))
> > {
> > +     stop("One or more raster layers could not be loaded. Please check
> the
> > layer names.")
> > + }
> >
> > > # Convert raster values to vectors
> > > t2m_values <- values(t2m)
> > Error in dimnames(x) <- dn :
> >   length of 'dimnames' [2] not equal to array extent
> > > d2m_values <- values(d2m)
> > Error in dimnames(x) <- dn :
> >   length of 'dimnames' [2] not equal to array extent
> > > tcc_values <- values(tcc)
> > Error in dimnames(x) <- dn :
> >   length of 'dimnames' [2] not equal to array extent
> > > valid_time_values <- values(valid_time)
> > Error in dimnames(x) <- dn :
> >   length of 'dimnames' [2] not equal to array extent
> >
> > # Check for NA values and dimensions
> > if (any(is.na(t2m_values)) || any(is.na(d2m_values)) || any(is.na
> (tcc_values))
> > || any(is.na(valid_time_values))) {
> >   warning("One or more layers contain NA values. These will be removed.")
> > }
> >
> > # Create the data frame, ensuring no NA values are included
> > df <- data.frame(
> >   t2m = t2m_values,
> >   d2m = d2m_values,
> >   tcc = tcc_values,
> >   valid_time = valid_time_values,
> >   stringsAsFactors = FALSE
> > )
> >
> > # Remove rows with NA values
> > df <- na.omit(df)
> >
> > # Convert temperatures from Kelvin to Celsius
> > df$t2m <- df$t2m - 273.15
> > df$d2m <- df$d2m - 273.15
> >
> > # Calculate relative humidity
> > calculate_relative_humidity <- function(t2m, d2m) {
> >   es <- 6.112 * exp((17.67 * t2m) / (t2m + 243.5))
> >   e <- 6.112 * exp((17.67 * d2m) / (d2m + 243.5))
> >   rh <- (e / es) * 100
> >   return(rh)
> > }
> > df$RH <- calculate_relative_humidity(df$t2m, df$d2m)
> >
> > # Convert valid_time from numeric to POSIXct assuming it's in seconds
> since
> > the epoch
> > df$valid_time <- as.POSIXct(df$valid_time, origin = "1970-01-01")
> >
> > # Extract year, month, day, and hour from valid_time
> > df$Year <- year(df$valid_time)
> > df$Month <- month(df$valid_time)
> > df$Day <- day(df$valid_time)
> > df$Hour <- hour(df$valid_time)
> >
> > # Select only the desired columns
> > df_selected <- df %>% select(Year, Month, Day, Hour, tcc, t2m, RH)
> >
> > # Save the updated DataFrame to an Excel file
> > write.xlsx(df_selected, excel_file_path, row.names = FALSE)
> >
> >
> >
> >
> >
> >
> > --
> > Best Regards
> > Javad Bayat
> > M.Sc. Environment Engineering
> > Alternative Mail: bayat194 using yahoo.com
> >
> >         [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> https://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list