열에 'hsa ..'와 같은 문자열이있는 행 선택 (부분 문자열 일치)
마이크로 RNA 데이터가 포함 된 371MB 텍스트 파일이 있습니다. 기본적으로 인간 microRNA에 대한 정보가있는 행만 선택하고 싶습니다.
read.table을 사용하여 파일을 읽었습니다. 일반적으로 'like'구문이있는 경우 sqldf로 원하는 것을 수행합니다 ( 'hsa'와 같은 miRNA에서 * from <> 선택). 불행히도 sqldf는 해당 구문을 지원하지 않습니다.
R에서 어떻게 할 수 있습니까? 나는 stackoverflow를 둘러 보았고 부분 문자열 일치를 수행하는 방법에 대한 예를 보지 못했습니다 . 나는 심지어 stringr 패키지를 설치했지만 내가 필요한 것을 가지고 있지 않습니다.
내가하고 싶은 것은 hsa- * 가 선택 되는 모든 행이있는 것 입니다.
selectedRows <- conservedData[, conservedData$miRNA %like% "hsa-"]
물론 올바른 구문이 아닙니다.
누군가 나를 도와 줄 수 있습니까? 읽어 주셔서 감사합니다.
아스다
%like%
현재 접근 방식에서 함수를 언급 한 것을 알았습니다 . 그것이 %like%
"data.table" 의 참조인지는 모르겠지만, 그렇다면 다음과 같이 확실히 사용할 수 있습니다.
객체가 a 일 필요는 data.table
없지만 data.frame
s 및 data.table
s에 대한 부분 집합 화 방식 이 동일하지 않음 을 기억하십시오 .
library(data.table)
mtcars[rownames(mtcars) %like% "Merc", ]
iris[iris$Species %like% "osa", ]
그것이 당신이 가진 것이라면 아마도 데이터 부분 집합 화를 위해 행과 열 위치를 혼합했을 것입니다.
패키지를로드하지 않으려면을 사용하여 grep()
일치하는 문자열을 검색 할 수 있습니다 . 다음 mtcars
은 행 이름에 "Merc"가 포함 된 모든 행과 일치하는 데이터 세트 의 예입니다 .
mtcars[grep("Merc", rownames(mtcars)), ]
mpg cyl disp hp drat wt qsec vs am gear carb
# Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2
# Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2
# Merc 280 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4
# Merc 280C 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4
# Merc 450SE 16.4 8 275.8 180 3.07 4.07 17.4 0 0 3 3
# Merc 450SL 17.3 8 275.8 180 3.07 3.73 17.6 0 0 3 3
# Merc 450SLC 15.2 8 275.8 180 3.07 3.78 18.0 0 0 3 3
그리고 또 다른 예 iris
는 문자열을 검색 하는 데이터 세트를 사용하는 것입니다 osa
.
irisSubset <- iris[grep("osa", iris$Species), ]
head(irisSubset)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
문제에 대해 다음을 시도하십시오.
selectedRows <- conservedData[grep("hsa-", conservedData$miRNA), ]
문자열에서 패턴의 유무를 감지 str_detect()
하는 stringr 패키지를 사용해보십시오 .
여기에 또한 통합하는 접근 방법이다 %>%
파이프 filter()
로부터 dplyr의 패키지 :
library(stringr)
library(dplyr)
CO2 %>%
filter(str_detect(Treatment, "non"))
Plant Type Treatment conc uptake
1 Qn1 Quebec nonchilled 95 16.0
2 Qn1 Quebec nonchilled 175 30.4
3 Qn1 Quebec nonchilled 250 34.8
4 Qn1 Quebec nonchilled 350 37.2
5 Qn1 Quebec nonchilled 500 35.3
...
This filters the sample CO2 data set (that comes with R) for rows where the Treatment variable contains the substring "non". You can adjust whether str_detect
finds fixed matches or uses a regex - see the documentation for the stringr package.
LIKE
should work in sqlite:
require(sqldf)
df <- data.frame(name = c('bob','robert','peter'),id=c(1,2,3))
sqldf("select * from df where name LIKE '%er%'")
name id
1 robert 2
2 peter 3
'program story' 카테고리의 다른 글
DBMS_OUTPUT.PUT_LINE이 인쇄되지 않습니다. (0) | 2020.10.09 |
---|---|
? :,?!의 차이점은 무엇입니까? (0) | 2020.10.09 |
HashMap에서 효율적으로 조회하고 삽입하는 방법은 무엇입니까? (0) | 2020.10.08 |
JavaScript에서 SQLite 데이터베이스에 액세스 할 수 있습니까? (0) | 2020.10.08 |
'python setup.py install'과 'pip install'의 차이점 (0) | 2020.10.08 |