在“|”之前提取字符串

时间:2016-07-10 12:20:26

标签: r extract substr

我有一个数据集,其中列如下所示:

ABC|DEF|GHI,  
ABCD|EFG|HIJK,  
ABCDE|FGHI|JKL,  
DEF|GHIJ|KLM,  
GHI|JKLM|NO|PQRS,  
BCDE|FGHI|JKL  

....等等

我需要提取出现在第一个|符号之前的字符。

在Excel中,我们将使用MID-SEARCH或LEFT-SEARCH的组合,R包含substr()

语法为 - substr(x, <start>,<stop>)

在我的情况下,start始终为1.要停止,我们需要按|进行搜索。我们怎样才能做到这一点?有没有其他方法可以做到这一点?

3 个答案:

答案 0 :(得分:12)

我们可以使用sub

sub("\\|.*", "", str1)
#[1] "ABC"

strsplit

strsplit(str1, "[|]")[[1]][1]
#[1] "ABC"

更新

如果我们使用@hrbrmstr

中的数据
sub("\\|.*", "", df$V1)
#[1] "ABC"   "ABCD"  "ABCDE" "DEF"   "GHI"   "BCDE" 

这些都是基础R方法。没有使用外部包。

数据

str1 <- "ABC|DEF|GHI ABCD|EFG|HIJK ABCDE|FGHI|JKL DEF|GHIJ|KLM GHI|JKLM|NO|PQRS BCDE|FGHI|JKL"

答案 1 :(得分:8)

word

的另一个选项stringr功能
library(stringr)
word(df1$V1,1,sep = "\\|")

数据

df1 <- read.table(text = "ABC|DEF|GHI,  
ABCD|EFG|HIJK,  
ABCDE|FGHI|JKL,  
DEF|GHIJ|KLM,  
GHI|JKLM|NO|PQRS,  
BCDE|FGHI|JKL")

答案 2 :(得分:3)

stringi

library(stringi)

df <- read.table(text="ABC|DEF|GHI,1
ABCD|EFG|HIJK,2
ABCDE|FGHI|JKL,3  
DEF|GHIJ|KLM,4
GHI|JKLM|NO|PQRS,5
BCDE|FGHI|JKL,6", sep=",", header=FALSE, stringsAsFactors=FALSE)

stri_match_first_regex(df$V1, "(.*?)\\|")[,2]
## [1] "ABC"   "ABCD"  "ABCDE" "DEF"   "GHI"   "BCDE"