我有一个具有以下结构的数据库。我想将最后一列,一个部件号和另一个与描述分开,用“ - ”分隔。在示例中,它可以正常工作。但是当我在我的数据库中使用它(50,700个案例)时,我收到一条错误消息。
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 = "\\-")
这是错误消息
警告讯息: 在174个位置的值太多:3645,4401,5118,10013,10018,10023,10905,10907,10921,10923,10928,10930,10935,10937,10942,10944,11586,13556,13557,13614,......
提前致谢。
答案 0 :(得分:1)
某些行中可能有多个-
,这可能是警告的原因。一个选项是来自cSplit
的{{1}}。它将根据特定行中“ - ”的最大数量(即“n”)将“econ.activ”拆分为“n”列。默认情况下,如果某些行中的“ - ”数量较少,它会将NA填充到列。
splitstackshape
如果我们需要重现警告,只需在其中一个元素中插入另一个library(splitstackshape)
cSplit(df, "econ.activ", sep="-")
-
警告消息:1个位置的值太多:3
这是因为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 = "\\-")
---
---
有一个参数separate
,默认为extra
。还有其他选项,例如warn
或drop
。如果我们使用merge
,则从第二个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.
,它会在“descripción”列中保留该子字符串。所以,基本上,它取决于OP想要的输出
extra = "merge"