2016-07-18 68 views
2

我有150個站點(Cod),每個站點都有一些使用的服務。如何將行中的信息轉換爲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包河或任何一種方式做到這一點?

+0

請問您可以使用'dput(包含可重複使用的示例)(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) )'? – 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

請注意,如果你想保持對服務是否來自SERVICE1SERVICE2,或SERVICE3的信息,你會完全省略最後一行(dplyr::select)。