2016-08-21 6 views
1

私は以下の構造のデータベースを持っています。私は最後の列、部品番号、および説明と一緒に「 - 」で区切って区別したいと思います。この例ではOKです。しかし、これをデータベース(50,700件)で使用すると、エラーメッセージが表示されます。tidyr :: separateは大きなdata.frameで動作しません

 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

いくつかの行に複数の-が存在する可能性があり、それが警告の原因になっている可能性があります。 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

:1つの場所であまりにも多くの値

separateには、引数がであるためです(デフォルトではwarn)。 dropmergeなどのオプションがあります。我々はそれが2回目以降-

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"とから部分を削除dropを使用している場合、それは「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. 
関連する問題