Post

R 문자열 특정문자 기준으로 자르기

single-cell data를 다루다 보면 gene name이라던지, cell ID에 원치않는 부가정보가 붙어서 따라올때가 있는데 이를 정리해주고 싶다면 rstrsplit function을 사용해아한다.

  • cell ID (ABCDABCDABCDABCD-1)에서 “-1” 부분을 지우고 싶다.
  • ADT file 읽어들였는데 feature name앞에 “adt-“ 붙어있음.

strsplit()

R에서 strsplit() 은 python에서 rsplit() 과 비슷한 기능을 한다. 기준이 되는 문자열을 parameter로 넣어주면 그 문자를 기준으로 앞뒤를 잘라주는것.

python과 다른 점은 결과의 형태가 다르다는것. 파이썬은 후가공하기 편하게 vector형태로 결과를 주는 반면,

R은 vector를 입력으로 받아 list형태로 반환한다. 예시를 보면..

1
2
3
ex_input <- c("Subin, Cho", "Hype, Boy", "New, Jeans")
ex_split <- rstrsplit(ex_input, split=", ")
ex_split
1
2
3
4
5
6
7
8
[[1]]
[1] "Subin" "Cho"

[[2]]
[1] "Hype" "Boy"

[[3]]
[1] "New" "Jeans"

이런식의 결과를 얻게된다.

따라서 , 기준으로 앞부분만 / 뒷부분만 벡터로 가져오고 싶다면..

Sapply() 와 함께 쓰기

Sapply는 python의 lambda (?) 같은 기능이랄까. 조금 다르긴한데 for/while문을 활용한 자동화를 더욱 빠르게 + 한줄로 만들어주는 기능을 담당한다.

R에는 출력되는 결과의 형태에 따라서 apply, lapply, vapply등 다른 functions도 있다.

BTW, sapply() 는 결과를 벡터 형태로 뱉어준다. 기본적인 구조는 다음과 같다.

1
2
3
sapply(input, function, ...) # do not run

sapply(num, mean, na.rm=T)

function부분에 function(x)을 사용해서 원하는 함수를 짜넣을수도 있어서 활용도가 높다.

아까 하려던 cellID에서 “-“ 앞부분만 가져오는 작업을 strsplit()sapply()를 이용해서 해결하려면

sapply input
cellID 벡터, colnames(seurat_obj)로 불러올 수 있다. 이게 하나씩 function(x)의 x부분에 들어간다.
function()
cellID를 읽어들여 “-“ 기준으로 잘라서 앞부분만 가져오는 코드 w. strsplit()으로 해결가능.
1
sapply(colnames(seurat_obj), function(x) strsplit(x,split="-")[[1]][1]))

끝!

reference

This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.