очистка расплава от грязных данных о времени - PullRequest
1 голос
/ 25 марта 2020

Итак, у меня есть источник данных, который очень грязный CSV-файл. Я могу загрузить данные в R и после некоторых незначительных манипуляций у меня будет следующее:

region Country   Lat   Long `1/22/20` `1/23/20` `1/24/20` `1/25/20` `1/26/20` `1/27/20` `1/28/20` `1/29/20` `1/30/20` `1/31/20` `2/1/20`
  <chr>  <chr>   <dbl>  <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>    <dbl>
1 Chann… United…  49.4  -2.36         1         1         1         0         0         0         0         0         0         0        0
2 Gibra… United…  36.1  -5.35         1         1         1         0         0         0         0         0         0         0        0
3 Unite… United…  55.4  -3.44         1         1         1         0         0         0         0         0         0         0        0
4 Cayma… United…  19.3 -81.3          0         1         1         0         0         0         0         0         0         0        0
5 Monts… United…  16.7 -62.2          0         0         1         0         0         0         0         0         0         0        0
6 Bermu… United…  32.3 -64.8          0         0         0         0         0         0         0         0         0         0        0
7 Isle … United…  54.2  -4.55         0         0         0         0         0         0         0         0         0         0        0

, если я удаляю данные lat / long и выполняю функцию плавления, чтобы перейти в «высокий» формат, который я получаю что-то похожее на это:

15  Channel Islands United Kingdom 1/22/20   1
16        Gibraltar United Kingdom 1/22/20   1
17   United Kingdom United Kingdom 1/22/20   1
18   Cayman Islands United Kingdom 1/22/20   0.0000
19       Montserrat United Kingdom 1/22/20   0.0000
20          Bermuda United Kingdom 1/22/20   0.0000
21      Isle of Man United Kingdom 1/22/20   0.0000
22  Channel Islands United Kingdom 1/23/20   1
23        Gibraltar United Kingdom 1/23/20   1
24   United Kingdom United Kingdom 1/23/20   1
25   Cayman Islands United Kingdom 1/23/20   1
26       Montserrat United Kingdom 1/23/20   0.0000
27          Bermuda United Kingdom 1/23/20   0.0000
28      Isle of Man United Kingdom 1/23/20   0.0000
29  Channel Islands United Kingdom 1/24/20   1
30        Gibraltar United Kingdom 1/24/20   1
31   United Kingdom United Kingdom 1/24/20   1
32   Cayman Islands United Kingdom 1/24/20   1
33       Montserrat United Kingdom 1/24/20   1
34          Bermuda United Kingdom 1/24/20   0.0000
35      Isle of Man United Kingdom 1/24/20   0.0000
36  Channel Islands United Kingdom 1/25/20   0.0000
37        Gibraltar United Kingdom 1/25/20   0.0000
38   United Kingdom United Kingdom 1/25/20   0.0000
39   Cayman Islands United Kingdom 1/25/20   0.0000
40       Montserrat United Kingdom 1/25/20   0.0000
41          Bermuda United Kingdom 1/25/20   0.0000
42      Isle of Man United Kingdom 1/25/20   0.0000

что я хотел бы сделать для полного набора данных, это объединить данные для всех регионов, для каждой страны, чтобы у меня было одно значение для каждой страны на каждый день :

United Kingdom 1/22/20 3
United Kingdom 1/23/20 4
United Kingdom 1/24/20 5

Помощь была бы признательна!

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Спасибо за предложения ... использовали функцию агрегирования и достигли частичного решения:

434  United Kingdom United Kingdom 3/21/20 233.0000
435         Bermuda United Kingdom 3/22/20   0.0000
436  Cayman Islands United Kingdom 3/22/20   1.0000
437 Channel Islands United Kingdom 3/22/20   0.0000
438       Gibraltar United Kingdom 3/22/20   0.0000
439     Isle of Man United Kingdom 3/22/20   0.0000
440      Montserrat United Kingdom 3/22/20   0.0000
441  United Kingdom United Kingdom 3/22/20 281.0000
442         Bermuda United Kingdom 3/23/20   0.0000
443  Cayman Islands United Kingdom 3/23/20   1.0000
444 Channel Islands United Kingdom 3/23/20   0.0000
445       Gibraltar United Kingdom 3/23/20   0.0000
446     Isle of Man United Kingdom 3/23/20   0.0000
447      Montserrat United Kingdom 3/23/20   0.0000
448  United Kingdom United Kingdom 3/23/20 281.0000

Есть ли способ вырезать (теперь избыточные) области и сохранить только строку агрегирования? Я могу придумать несколько способов для этого примера, но они не будут хорошо работать с большим набором данных, где некоторые строки содержат данные региона, а другие нет ....

0 голосов
/ 25 марта 2020

Мы можем повернуть в «длинный» формат и затем подвести итог

library(dplyr)
library(tidyr)
df1 %>%
   select(-Lat, -Long) %>%
   pivot_longer(cols = -c(region, Country), names_to = 'Date') %>%
    group_by(region, Country, Date) %>%
    summarise(value = sum(value))

Или, если у нас уже есть melt ed, тогда решение base R будет

aggregate(value ~ ., df1, FUN = sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...