当字段嵌入分隔符时,cSplit不起作用

时间:2017-09-03 16:58:48

标签: r splitstackshape csplit

我正在使用cSplit将列拆分为三个单独的列。分隔符是“/”

但是,我的一个字段嵌入了“/”分隔符。第三行的第三个元素应该是并且在分裂后保持为“f / j”。

当我在以下示例中尝试它时,它会创建一个额外的(第四列)

name <- c("abc / efg / hij", "abc / abc / hij", "efg / efg / f/j", "abd / efj / hij")
y <- c(1,1.2,3.4, 5)

dt <- data.frame(name,y)
dt
dt <- cSplit(dt,"name","/", drop=FALSE)
dt

当我在原始数据集中尝试它时,它有超过5,000行,它会产生以下错误:

  

fread(x,sep [i],header = FALSE)出错:

     

期待3门,但是   第2307行包含处理所有cols后的文本。再试一次   填写= TRUE。另一个原因可能是fread的逻辑   区分嵌入了sep ='/'和/或'\ n'的一个或多个字段   不平衡的未转义报价中的字符已失败。如果引用=''   没有帮助,请提出一个问题,以确定逻辑是否可以   改善。

2 个答案:

答案 0 :(得分:1)

如果数据的结构与构建name向量的方式相同,则可以使用以下内容,这取决于目标/字符被空格字符包围的想法:

cSplit(dt,"name"," / ", drop=FALSE)

但正如您所提到的,这导致了以下错误:

  

fread中的错误(x,sep [i],header = FALSE):'sep'必须是'auto'或者   单个字符

虽然我没有找出导致这种情况的主要原因,但我认为用下划线(或与/不同的任何其他内容)替换目标/个字符,然后在下划线上拆分。以下内容可以作为例证:

dt$name <- gsub("([^/]+)/([^/]+)/(.*)", "\\1_\\2_\\3", dt$name)
cSplit(dt, "name", "_", drop=F)

#           name   y name_1 name_2 name_3
# 1: abc_efg_hij 1.0    abc    efg    hij
# 2: abc_abc_hij 1.2    abc    abc    hij
# 3: efg_efg_f/j 3.4    efg    efg    f/j
# 4: abd_efj_hij 5.0    abd    efj    hij

我希望这会有所帮助。

答案 1 :(得分:0)

您应该可以设置>>> re.findall(regex, str(htmltext)) ['161.38']

fixed = FALSE