2017-08-09 83 views

回答

1

一种选择是使用gsub()识别并提取垂直管道的两侧在单柱:

df <- data.frame(col=c('METHAMPHETAMINE | MORPHINE', 'THC')) 
df$col1 <- gsub("(.*)\\s*\\|.*", "\\1", df$col) 
df$col2 <- ifelse(grepl(".*\\|\\s*(.*)", df$col), 
        gsub(".*\\|\\s*(.*)", "\\1", df$col), 
        "") 

df 
         col    col1  col2 
1 METHAMPHETAMINE | MORPHINE METHAMPHETAMINE MORPHINE 
2      THC    THC 

Demo

你的问题是一个曲线球的东西,因为从你的样品数据我们可以看到,并非数据框中的每一行都可能有第二列的管道。这是gsub()的一个特性,当找不到匹配时返回输入字符串,但在我们的情况下,如果没有管道存在,我们只需要空字符串。这里的一个选择是使用grepl()来首先检查模式是否匹配,如果不匹配,则返回空字符串。

可能是this question的副本,虽然在那里给出答案的新应用程序将需要回答你的问题。

+0

不是很多,从可能重复的问题改变 - 'str_split_fixed(DF $关口,固定的( “|”),2)' – thelatemail

0
> a1=read.csv("test.csv",header=F) 
> a1 
          V1 
1 METHAMPHETAMINE | MORPHINE 
2      THC 


> within(a1, FOO<-data.frame(do.call('rbind', strsplit(as.character(V1), '|', fixed=TRUE)))) 
          V1   FOO.X1 FOO.X2 
1 METHAMPHETAMINE | MORPHINE METHAMPHETAMINE MORPHINE 
2      THC    THC  THC 

Split column at delimiter in data frame