2016-07-18 1 views
2

У меня есть 150 остановок (Треска), и каждый из них имеет ряд услуг, которые использовались.Как перенести информацию в строки в один столбец в R?

|  Cod | SERVICE1 | SERVICE2 | SERVICE3 | Position 
------------------------------------------------------ 
| P05  |  XRS10 |  XRS07|  XRS05| 12455 
| R07  |  FR05 |   |   | 4521 
| X05  |  XRS07 |  XRS10|   | 57541 

Мне нужно поставить все службы (SERVICE1, SERVICE2, SERVICE3) в одну колонку. Это означает, что мне нужен следующий результат.

|  Cod | SERVICE | Position 
------------------------------------------------------ 
| P05  |  XRS10 | 12455 
| P05  |  XRS07 | 12455 
| P05  |  XRS05 | 12455 
| R07  |  FR05 | 4521 
| X05  |  XRS07 | 57541 
| X05  |  XRS10 | 57541 

Существует ли способ сделать это, используя sqldf пакет R. Или какой-либо способ сделать это?

+0

Не могли бы вы включить [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) данных, возможно, используя 'dput () '? – BarkleyBG

ответ

1

попробовать это:

library(magrittr) ##used for the pipe, %>% 
library(dplyr) ##for filtering observations and selecting columns 
library(tidyr) ##for making your dataset long/tidy 

new_data <- original_data %>% 
tidyr::gather(key = service_type, value = SERVICE) %>% 
dplyr::filter(!is.na(SERVICE)) %>% 
dplyr::select(-service_type) 

К сожалению, я не знаком с sqldf

Обратите внимание, что если вы хотите сохранить информацию о идет ли услуга от SERVICE1, SERVICE2 или SERVICE3, вы будете опустить последнюю строку (dplyr::select) полностью.

Смежные вопросы