열에있는 문자열의 부분 일치를 기반으로 데이터 프레임에서 행을 선택하고 싶습니다. 예를 들어 열 ‘x’에 문자열 “hsa”가 포함되어 있습니다. 사용 sqldf
– 경우에 그것이 있었다 like
구문 – 내가 좋아하는 일을 할 것을 :
select * from <> where x like 'hsa'
.
불행히도 sqldf
해당 구문을 지원하지 않습니다.
또는 유사하게 :
selectedRows <- df[ , df$x %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
...
이렇게하면 처리 변수에 하위 문자열 “non”이 포함 된 행에 대한 샘플 CO2 데이터 세트 (R과 함께 제공됨)가 필터링됩니다. str_detect
고정 된 일치를 찾거나 정규식을 사용 하는지 여부를 조정할 수 있습니다 . stringr 패키지에 대한 문서를 참조하십시오.
답변
LIKE
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