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.