Обработка данных в R со столбцом DateTime и несколькими наблюдениями

У меня есть обычно отформатированный набор данных в CSV-файле, который я читаю в R как tibble или data.frame. Поскольку это происходит откуда-то еще, оно имеет широкий формат, подобный этому, где первая строка является заголовком фрейма данных:

datetime City1 City2 City3 City4
2020-01-01 00:15 2.3 2.6 2.1 2.2
2020-01-01 00:30 1.1 1.8 1.6 1.2
...

Чтобы использовать данные для дальнейшего анализа в R, они должны быть в длинном формате, в котором дата и время повторяются, поэтому их следует преобразовать во что-то вроде этого (с новым заголовком):

datetime Location Value
2020-01-01 00:15 City1 2.3
2020-01-01 00:15 City2 2.6
2020-01-01 00:15 City3 2.1
2020-01-01 00:15 City4 2.2
2020-01-01 00:30 City1 1.1
2020-01-01 00:30 City2 1.8
2020-01-01 00:30 City3 1.6
2020-01-01 00:30 City4 1.2
...

Это кажется такой распространенной задачей обработки данных, но я не смог найти хороший пример после подготовки документации pivot_longer (также возможно, что я не полностью понимаю предоставленные примеры).


person ITH    schedule 01.10.2020    source источник


Ответы (2)


Этот ответ:

> df
# A tibble: 2 x 5
  datetime            City1 City2 City3 City4
  <dttm>              <dbl> <dbl> <dbl> <dbl>
1 2020-01-01 00:15:00   2.3   2.6   2.1   2.2
2 2020-01-01 00:30:00   1.1   1.8   1.6   1.2
> df %>% pivot_longer(cols = starts_with('City'), names_to = 'Location')
# A tibble: 8 x 3
  datetime            Location value
  <dttm>              <chr>    <dbl>
1 2020-01-01 00:15:00 City1      2.3
2 2020-01-01 00:15:00 City2      2.6
3 2020-01-01 00:15:00 City3      2.1
4 2020-01-01 00:15:00 City4      2.2
5 2020-01-01 00:30:00 City1      1.1
6 2020-01-01 00:30:00 City2      1.8
7 2020-01-01 00:30:00 City3      1.6
8 2020-01-01 00:30:00 City4      1.2
> 
person Karthik S    schedule 01.10.2020

Надеюсь, это поможет:

library(data.table)
df <- setDT(your_df)
melt(df,
     id.vars='datetime',
     variable.name = 'Location', 
     value.name = 'Value')
person peter    schedule 01.10.2020