2017-08-09 114 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