[R] Problem with converting grib file to excel

javad bayat j@b@y@t194 @end|ng |rom gm@||@com
Tue Sep 24 08:31:22 CEST 2024


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



More information about the R-help mailing list