Использовать определенные строки в качестве значений в сгруппированном новом столбце (данные, импортированные из Excel)

#r #excel #tidyverse

#r #excel #tidyverse

Вопрос:

У меня есть эти данные о концентрации PM10 в Германии. Его можно скачать по этой [ссылке] (https://www.umweltbundesamt.de/sites/default/files/medien/4640/dokumente/pm10_2019_0.xlsx )

В Excel это выглядит примерно так:

введите описание изображения здесь

Эта проблема здесь заключается в том, что для каждого из 16 состояний существует «объединенная» одна строка, и до следующей строки такого рода существуют отдельные станции, которые измеряют концентрацию PM10. Что я хотел бы сделать сейчас, так это создать новый столбец для каждого состояния, каждое из которых присваивает имя состояния каждому измерению.

Честно говоря, я понятия не имею, как это сделать в R. Я полагаю, что может быть какой-то обходной путь с чем-то в псевдокоде, например

 state = None
for each row: 
  if (NA in Statiocode):
    state = Name
  else:
    new_col = state
 

Похоже ли это на какой-то правильный подход?

Ответ №1:

Простой этот код подойдет

 library(readxl)
data <- read_excel("pm10_2019_0.xlsx", skip = 46)

library(tidyverse)

data <- data %>% mutate(State = ifelse(is.na(Stationscode), `Name / Messnetz`, NA)) %>%
  fill(State) %>% filter(!is.na(Stationscode)) %>% select(State, everything())

data
# A tibble: 376 x 7
   State     Stationscode `Name / Messnetz`    Stationsumgebung   `Art der Station` `Jahresmittelwert ~ `Zahl der Tageswerte ~
   <chr>     <chr>        <chr>                <chr>              <chr>                            <dbl>                  <dbl>
 1 Baden-~ DEBW029      Aalen                vorstädtisches Ge~ Hintergrund                         14                      0
 2 Baden-~ DEBW076      Baden-Baden          vorstädtisches Ge~ Hintergrund                         12                      0
 3 Baden-~ DEBW042      Bernhausen           vorstädtisches Ge~ Hintergrund                         16                      2
 4 Baden-~ DEBW046      Biberach             vorstädtisches Ge~ Hintergrund                         14                      0
 5 Baden-~ DEBW004      Eggenstein           ländlich stadtnah  Hintergrund                         15                      0
 6 Baden-~ DEBW220      Esslingen Grabbrunn~ städtisches Gebiet Verkehr                             23                     16
 7 Baden-~ DEBW084      Freiburg             städtisches Gebiet Hintergrund                         13                      2
 8 Baden-~ DEBW122      Freiburg Schwarzwal~ städtisches Gebiet Verkehr                             15                      3
 9 Baden-~ DEBW038      Friedrichshafen      städtisches Gebiet Hintergrund                         14                      1
10 Baden-~ DEBW112      Gärtringen           vorstädtisches Ge~ Hintergrund                         13                      1
# ... with 366 more rows
 

Ответ №2:

Я надеюсь, что следующее поможет

 data <- read_excel("pm10_2019_0.xlsx", skip = 46)
names <- data %>% filter(is.na(Stationscode)) %>% select(`Name / Messnetz`)
index <- which(is.na(data$Stationscode))

for(i in 1:nrow(data)){
  
  data[i,"City"] <- cut(i, breaks = c(index, nrow(data)), labels = names$`Name / Messnetz`)
  
}
data <- data %>% filter(!is.na(Stationscode))