Я сделал следующие предположения, которые не были ясны в вашем вопросе выше (я буду при необходимости изменять свой ответ, если они будут неправильными):
- Уникальные наблюдения обозначаются комбинацией
Station identifier
, Station number
и Observation time
- Каждое наблюдение содержит эти три идентификатора, и они всегда происходят в одном и том же порядке непосредственно перед данными, связанными с этим наблюдением
- Я ничего не знаю о формате даты-времени, используемом в
Observation time
, но я предполагаю, что это что-то вроде 'date'/'time'
, где 'date'
- целочисленная последовательность, которая относится к числу дней после определенной контрольной даты.
Сначала , попробуйте включить воспроизводимый набор данных в эти вопросы или ссылку на общедоступные данные:
# Create Reproducible Dataset ---------------------------------------------
measure <- c("Station identifier",
"Station number",
"Observation time", "Mean mixed layer potential temperature",
"Mean mixed layer mixing ratio", "1000 hPa to 500 hPa thickness",
"Precipitable water [mm] for entire sounding", "Station identifier",
"Station number", "Observation time",
"Mean mixed layer potential temperature",
"Mean mixed layer mixing ratio", "1000 hPa to 500 hPa thickness",
"Precipitable water [mm] for entire sounding", "Station identifier",
"Station number", "Observation time",
"Mean mixed layer potential temperature",
"Mean mixed layer mixing ratio",
"1000 hPa to 500 hPa thickness", "Station identifier",
"Station number", "Observation time")
value <- c("WAML", "97072", "150101/0000", "298.68", "16.77", "5773.00", "55.86",
"WAML", "97072", "150109/1200", "300.78", "16.29", "5784.00", "52.46",
"WAML", "97072", "150110/0000", "297.48", "16.55", "5760.00", "WAML",
"97072", "150110/1200")
df <- data.frame(measure = measure, value = value, stringsAsFactors = FALSE)
Теперь к вашему вопросу:
# Solution ----------------------------------------------------------------
# Create index of rows where `measure == "Station identifier"`
idx <- which(df$measure == "Station identifier")
df %>%
# Create Unique Identifier for each station
dplyr::mutate(station_id = cut(1:nrow(df),
c(idx, nrow(df)),
right = FALSE,
include.lowest = TRUE)) %>%
dplyr::filter(measure %in% c("Observation time",
"Precipitable water [mm] for entire sounding")) %>%
# Turn each value in measure to a new column
tidyr::pivot_wider(names_from = "measure", values_from = "value", ) %>%
# Inelegant way of sorting by date and time
dplyr::mutate(ot = as.numeric(sub("\\/", ".", `Observation time`))) %>%
dplyr::arrange(ot) %>%
dplyr::select(-ot) %>%
tidyr::drop_na()
Наконец, я хотел бы отметить, что, хотя вы, вероятно, сможете анализировать и анализировать эти данные очень хорошо, используя пакеты tidyverse
, если ваше поле исследования требуют частого использования геопространственных, пространственно-временных или атмосферных данных c, кажется, уже существует большая коллекция пакетов R, специально созданных для этой цели. У меня нет абсолютно никакого опыта в этом отношении, но из моего краткого поиска пакет spacetime на CRAN кажется многообещающим, поскольку он может обрабатывать данные в этом формате. Еще один ресурс, который может быть полезен - следующий праймер от Edzer Pebesma .
Надеюсь, это полезно.