패턴에 따라 R에서 부분 문자열을 추출
문자열 목록이 있다고 가정하십시오 string = c("G1:E001", "G2:E002", "G3:E003")
. 이제 콜론 ":"뒤에있는 부분 만 포함하는 문자열 벡터를 얻으려고합니다 substring = c(E001,E002,E003)
. R에 이것을 수행하는 편리한 방법이 있습니까? 사용 substr
? 감사!
몇 가지 방법이 있습니다.
1) 하위
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) 읽은 테이블
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) 부분 문자열
이것은 두 번째 부분이 항상 4 번째 문자로 시작한다고 가정합니다 (이 예제의 경우).
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) 부분 문자열 / 정규식
콜론이 항상 알려진 위치에 있지 않은 경우 콜론을 검색하여 (4)를 수정할 수 있습니다.
substring(string, regexpr(":", string) + 1)
5) 스트랩
strapplyc
괄호로 묶은 부분을 반환합니다.
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
이것은 콜론 이전의 하위 문자열이 고유 한 경우에만 작동합니다 (문제의 예에 있음). 또한 구분 기호는 콜론이어야합니다 (문제에 있습니다). 다른 구분 기호를 사용한 경우 먼저 구분 기호를 sub
콜론으로 바꾸는 데 사용할 수 있습니다 . 예를 들어, 세퍼레이터 경우였다 _
그때string <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) 분리 하여 tidyr::separate
우리가 두 개의 열, 결장 앞부분 용과 후 하나와 데이터 프레임을 생성하고, 후자를 추출한다.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7A) 대안은 separate
단지 만드는 데 사용할 수있는 post
열 다음 unlist
과 unname
결과 데이터 프레임 :
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
추가되었습니다. strapplyc
, read.dcf
및 separate
솔루션을 제공합니다.
노트.
입력 string
은 다음과 같습니다.
string <- c("G1:E001", "G2:E002", "G3:E003")
예를 들어 gsub
또는sub
gsub('.*:(.*)','\\1',string)
1] "E001" "E002" "E003"
Here is another simple answer
gsub("^.*:","", string)
Late to the party, but for posterity, the stringr package (part of the popular "tidyverse" suite of packages) now provides functions with harmonised signatures for string handling:
string <- c("G1:E001", "G2:E002", "G3:E003")
stringr::str_extract(string = string, pattern = "E[0-9]+")
# [1] "E001" "E002" "E003"
This should do:
gsub("[A-Z][1-9]:", "", string)
gives
[1] "E001" "E002" "E003"
If you are using data.table
then tstrsplit()
is a natural choice:
tstrsplit(string, ":")[[2]]
[1] "E001" "E002" "E003"
참고URL : https://stackoverflow.com/questions/17215789/extract-a-substring-in-r-according-to-a-pattern
'programing tip' 카테고리의 다른 글
행 1과 열 A를 동시에 고정 (0) | 2020.07.23 |
---|---|
페이징을 구현하는 효율적인 방법 (0) | 2020.07.23 |
코드 주석에서 #XXX의 의미는 무엇입니까? (0) | 2020.07.23 |
jQuery : $ (). click (fn) vs. $ (). bind ( 'click', fn); (0) | 2020.07.23 |
대기중인 performSelector : afterDelay 호출 취소 (0) | 2020.07.23 |