Roy Mendelssohn - NOAA Federal
2024-Sep-25 23:02 UTC
[R] Problem with converting grib file to excel
At least for me the dataset file did not come through. I will look at it if it can be made available. It does look like the finial step of reading the data into raster failed, so then did the rest of th commands. -Roy> On Sep 25, 2024, at 3:24 PM, CALUM POLWART <polc1410 at gmail.com> wrote: > > 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 at 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 at 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 at yahoo.com >>> >>> [[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 >> https://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> >> ______________________________________________ >> 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 >> https://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > [[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 https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.********************** "The contents of this message do not reflect any position of the U.S. Government or NOAA." ********************** Roy Mendelssohn Supervisory Operations Research Analyst NOAA/NMFS Environmental Research Division Southwest Fisheries Science Center ***Note new street address*** 110 McAllister Way Santa Cruz, CA 95060 Phone: (831)-420-3666 Fax: (831) 420-3980 e-mail: Roy.Mendelssohn at noaa.gov www: https://www.pfeg.noaa.gov/ "Old age and treachery will overcome youth and skill." "From those who have been given much, much will be expected" "the arc of the moral universe is long, but it bends toward justice" -MLK Jr.
Dear all; Many thanks for your responses. Actually it is not completely a GIS file, it is a data file which stores meteorological data of a specific region. But the site allows downloading with grib format and as I searched to read this type of file in R, I found the Raster Package. In python it is possible to do this using cdsapi and xarray library, but I am not familiar with python. Sincerely On Thu, Sep 26, 2024 at 2:33?AM Roy Mendelssohn - NOAA Federal via R-help < r-help at r-project.org> wrote:> At least for me the dataset file did not come through. I will look at it > if it can be made available. It does look like the finial step of reading > the data into raster failed, so then did the rest of th commands. > > -Roy > > > > On Sep 25, 2024, at 3:24 PM, CALUM POLWART <polc1410 at gmail.com> wrote: > > > > 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 at 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 at 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 at yahoo.com > >>> > >>> [[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 > >> https://www.R-project.org/posting-guide.html > >>> and provide commented, minimal, self-contained, reproducible code. > >> > >> ______________________________________________ > >> 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 > >> https://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > >> > > > > [[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 > https://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > ********************** > "The contents of this message do not reflect any position of the U.S. > Government or NOAA." > ********************** > Roy Mendelssohn > Supervisory Operations Research Analyst > NOAA/NMFS > Environmental Research Division > Southwest Fisheries Science Center > ***Note new street address*** > 110 McAllister Way > Santa Cruz, CA 95060 > Phone: (831)-420-3666 > Fax: (831) 420-3980 > e-mail: Roy.Mendelssohn at noaa.gov www: https://www.pfeg.noaa.gov/ > > "Old age and treachery will overcome youth and skill." > "From those who have been given much, much will be expected" > "the arc of the moral universe is long, but it bends toward justice" -MLK > Jr. > > ______________________________________________ > 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 > https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Best Regards Javad Bayat M.Sc. Environment Engineering Alternative Mail: bayat194 at yahoo.com [[alternative HTML version deleted]]