Поднабор фрейма данных возвращает пустой фрейм данных - PullRequest
0 голосов
/ 29 августа 2018

Я знаю, это показывает, что этот вопрос уже был задан / получен ответ: (R) [] / subset () возвращает пустой фрейм данных , но у него не было решения, которое я искал за. (В моих столбцах нет пробелов)

Так вот мои исходные данные

head(d)
County    ID     event1       event2         row1           row2  
Rogers    1      Hearing      Application    Plea           Trial
Rogers    2      Arrest       Hearing        Application    Plea
Rogers    3      Arrest       Hearing        Plea           Disposal

Мне нужно, чтобы столбцы событий и строк существовали в одной строке.

events <- d %>%
  select(County, ID, contains("event"), contains("row")) %>%
  gather(m, event, contains("event")) %>%
  filter(!is.na(event)) %>%
  select(-m)

 head(events)
 County     ID     event        row1         row2
 Rogers     1      Hearing      Plea         Trial
 Rogers     1      Application  Plea         Trial
 Rogers     2      Arrest       Application  Plea
 Rogers     2      Hearing      Application  Plea

Мне все еще нужны были столбцы строк как события.

events2 <- events %>%
  select(County, ID, event, contains("row")) %>%
  gather(m, event, contains("row")) %>%
  filter(!is.na(event)) %>%
  select(-m)

Я надеялся, что это будет выглядеть так.

head(events2)
County      ID        event
Rogers      1         Hearing
Rogers      1         Application
Rogers      1         Plea
Rogers      1         Trial

Но вместо этого он вернул пустой фрейм данных с 0 наблюдениями.

events2
NULL

Что я делаю не так? Спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Подобно тем, которые упоминаются в комментариях, я также не могу воспроизвести вашу проблему, даже просто скопировав / вставив ваш код. То есть я получаю ожидаемый результат. Но у меня есть решение, которое может помочь.

Возможно, вы можете решить проблему, выполнив 1 раунд конвейера и вместо использования contains() с использованием версии регулярного выражения, matches() для сопоставления с row' ИЛИ 'event', что эффективно сопоставляет заголовки столбцов с 'строкой «И» событие. Это избавляет от необходимости запускать последовательность трубопроводов дважды, когда ошибки могут быть допущены с помощью метода копирования-вставки-изменения (я знаю, что я делаю их постоянно).

events <- d %>% 
  select(County,ID,matches('event|row')) %>% 
  gather(m,event,matches('row|event[0-9]+')) %>% 
  select(-m) %>%
  filter(!is.na(event))

Вкратце, вызов matches() в функции gather() говорит: Совпадение «строки» или совпадение «события», когда за ним следует хотя бы одно число от 0 до 9 . См. Этот аккуратный рисунок для получения дополнительной информации: Регулярные выражения в R .

Я должен был отсортировать data.frame после, но потом я получил:

>head(events)
  County ID       event
  Rogers  1     Hearing
  Rogers  1 Application
  Rogers  1        Plea
  Rogers  1       Trial
  Rogers  2      Arrest
  Rogers  2     Hearing

Я использую Tidyverse v1.2.1. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...