2016-08-21 13 views
1

我有一個具有以下結構的數據庫。我想分開最後一列,一個零件號和另一個與描述,用「 - 」分開。在這個例子中,它工作正常。但是,當我在我的數據庫中使用這個(50,700例)時,我收到一條錯誤消息。tidyr ::單獨不能使用大型數據。框架

 rut<-c("50001780", "50001810", "50001820", 
      "50001850", "50001890", "50001940") 
     econ.activ<-c("552010 - RESTAURANTES",          
     "930990 - OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P.", 
     "523911 - COMERCIO AL POR MENOR DE ARTICULOS FOTOGRAFICOS", 
     "930990 - OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P.", 
     "930990 - OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P.", 
     "930990 - OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P.") 

     df<-data.frame(rut,econ.activ) 

     df %>% separate(col = "econ.activ", into = c("folio", "descripción"), sep = "\\-") 

這是錯誤消息

警告消息:3645,4401,5118,10013,10018,10023,10905,10907,10921,10923,10928: 在174個位置處過多的值,10930,10935,10937,10942,10944,11586,13556,13557,13614,...

在此先感謝。

回答

1

在某些行中可能會有多個-,這可能是警告的原因。一種選擇是cSplit,從splitstackshape。它會根據特定行中' - '的最大數量(即'n')將'econ.activ'拆分爲'n'列數。默認情況下,如果某些行中' - '的數量較少,它會將NA填充到列。

library(splitstackshape) 
cSplit(df, "econ.activ", sep="-") 

如果我們需要複製的警告,只需插入另一個-中的元素

df$econ.activ <- as.character(df$econ.activ) 
df$econ.activ[3] <- "930990 - OTRAS - SEP" 
df %>% 
    separate(col = "econ.activ", into = c("folio", "descripción"), sep = "\\-") 
--- 
--- 

警告消息之一:太多值在1個地點:3

這是因爲separate有一個參數extra默認爲warn。還有其他選項,如dropmerge。如果我們使用drop從第二-刪除子起

df %>% 
    separate(col = "econ.activ", into = c("folio", "descripción"), sep = "\\-", extra="drop") 
#  rut folio          descripción 
#1 50001780 552010          RESTAURANTES 
#2 50001810 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
#3 50001820 930990            OTRAS 
#4 50001850 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
#5 50001890 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
#6 50001940 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 

extra = "merge",它保留在「descripción」列串。所以,基本上,這取決於OP想要什麼作爲輸出

df %>% 
    separate(col = "econ.activ", into = c("folio", "descripción"), 
       sep = "\\-", extra="merge") 
#  rut folio          descripción 
#1 50001780 552010          RESTAURANTES 
#2 50001810 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
#3 50001820 930990          OTRAS - SEP 
#4 50001850 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
#5 50001890 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
#6 50001940 930990 OTRAS ACTIVIDADES DE SERVICIOS PERSONALES N.C.P. 
相關問題