Таблица Spread and Gather возвращает повторяющиеся строки со значениями NA

У меня есть таблица с категориями и подкатегориями, закодированными в этом формате имени столбца:

Date| Admissions__0 |Attendance__0 |Tri_1__0|Tri_2__0|... Tri_1__1|Tri_2__1|...|

и я хотел бы изменить его на этот формат столбцов используя функцию распространения и сбора tidyverse:

Date| Country code| Admissions| Attendance| Tri_1|Tri_2|...

Я попробовал опубликованное решение, но результат фактически возвращает несколько строк с NA, а не одну строку.

Мой код использовал:

temp <- data %>% gather(key = "columns",value  = "dt",-Date) 

temp <- temp %>% mutate(category = gsub(".*__","",columns)) %>% mutate(columns = gsub("__\\d","",columns))

temp %>%  mutate(row = row_number()) %>% spread(key = "columns",value = "dt") 

И мои результаты:

Date        country_code   row admissions attendance Tri_1 Tri_2 Tri_3 Tri_4 Tri_5
   <chr>       <chr>        <int> <chr>      <chr>      <chr> <chr> <chr> <chr> <chr>
 1 01-APR-2014 0              275 NA         209        NA    NA    NA    NA    NA   
 2 01-APR-2014 0              640 84         NA         NA    NA    NA    NA    NA   
 3 01-APR-2014 0             1005 NA         NA         5     NA    NA    NA    NA   
 4 01-APR-2014 0             1370 NA         NA         NA    33    NA    NA    NA   
 5 01-APR-2014 0             1735 NA         NA         NA    NA    62    NA    NA   
 6 01-APR-2014 0             2100 NA         NA         NA    NA    NA    80    NA   
 7 01-APR-2014 0             2465 NA         NA         NA    NA    NA    NA    29   
 8 01-APR-2014 1             2830 NA         138        NA    NA    NA    NA    NA   
 9 01-APR-2014 1             3195 66         NA         NA    NA    NA    NA    NA   
10 01-APR-2014 1             3560 NA         NA         N/A   NA    NA    NA    NA  

Мои ожидаемые результаты:

Date        country_code   row admissions attendance Tri_1 Tri_2 Tri_3 Tri_4 Tri_5
   <chr>       <chr>        <int> <chr>      <chr>      <chr> <chr> <chr> <chr> <chr>
 1 01-APR-2014 0              275 84         209        5    33    62    80    29   
 8 01-APR-2014 1             2830 66         138        66   ...   ...   ...   ...   

Можете ли вы показать небольшие воспроизводимые входные данные

akrun 08.04.2019 05:58

Я думаю, вам нужно temp %>% group_by(Date, country_code) %>% mutate(row = row_number()) %>%spread(key = "columns",value = "dt") (не тестировалось, так как не было примера ввода)

akrun 08.04.2019 06:01

@akrun спасибо. data.gov.au/dataset/ds-dga-6bfec5ea-207e-4d67-8965-c7e722908‌​44b/… вот мой набор данных, над которым я работаю. Я попробовал ваше предложение, но оно по-прежнему возвращает те же результаты, что и раньше.

M1shka 08.04.2019 06:07

Я попытался загрузить данные. Я не получаю те же имена столбцов, что и ваши.

akrun 08.04.2019 06:12

@akrun, я отредактировал свои столбцы до начальных столбцов набора данных, можете ли вы получить для меня чек? заранее спасибо!

M1shka 08.04.2019 06:22

@akrun вот файл csv: drive.google.com/open?id=1wKutidGfGdzOZ65d4lUqb88s1k54ayBk спасибо

M1shka 08.04.2019 06:34

Не ясно, нужно ли удалять НС и объединять вместе. В таком случае data %>% gather(key = "columns", val = "dt", -Date, na.rm = TRUE) %>% mutate(category = gsub(".*__","",columns)) %>% mutate(columns = gsub("__\\d","",columns)) %>% group_by(Date, dt, columns, category) %>% mutate(rn = row_number()) %>% spread(columns, dt) %>% select(-V1) %>% summarise_at(vars(Admissions:Tri_5),list(~ coalesce(!!! .)))

akrun 08.04.2019 06:51

и для дальнейшего удаления всех строк NA %>% filter_at(vars(Admissions:Tri_5), all_vars(!is.na(.)))

akrun 08.04.2019 06:55

@akrun проблема решена! большое спасибо!

M1shka 08.04.2019 09:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
176
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем сделать summarise_atcoalesce, чтобы удалить NA элементы после spread

library(tidyverse)
data %>% 
  gather(key = "columns", val = "dt", -Date, na.rm = TRUE) %>%
  mutate(category = gsub(".*__","",columns)) %>%
  mutate(columns = gsub("__\\d","",columns)) %>% 
  group_by(Date, dt, columns, category) %>% 
  mutate(rn = row_number()) %>%
  spread(columns, dt) %>% 
  select(-V1) %>%
  summarise_at(vars(Admissions:Tri_5),list(~ coalesce(!!! .))) # %>%
  # filter if needed
  #filter_at(vars(Admissions:Tri_5), all_vars(!is.na(.)))

Другие вопросы по теме