我有一个数据集,其中列如下所示:
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.要停止,我们需要按|
进行搜索。我们怎样才能做到这一点?有没有其他方法可以做到这一点?
答案 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"