열에서 일치하는 부분 문자열을 기준으로 데이터 프레임 행 선택
열에 있는 문자열의 부분 일치를 기준으로 데이터 프레임에서 행을 선택하려고 합니다(예: 열 'x'에 문자열 "hsa"가 포함됨).사용.sqldf
만약 그것이like
구문 - 다음과 같은 작업을 수행합니다.
select * from <> where x like 'hsa'
.
불행하게도,sqldf
이 구문을 지원하지 않습니다.
또는 유사하게:
selectedRows <- df[ , df$x %like% "hsa-"]
물론 효과가 없는 것입니다.
누가 이것 좀 도와주시겠어요?
당신이 어떤 기능을 언급한 것을 알아챘습니다.%like%
당신의 현재 접근 방식에서.저는 그게 그 사건에 대한 언급인지 모르겠어요.%like%
"data.table"에서 사용할 수 있지만, 만약 그렇다면 다음과 같이 사용할 수 있습니다.
개체가 다음과 같을 필요는 없습니다.data.table
(그러나 부분 집합화 접근 방식은data.frame
모래땅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
고정 일치 항목을 찾거나 regex를 사용합니다. 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
다른 옵션은 단순히 사용하는 것입니다.grepl
함수:
df[grepl('er', df$name), ]
CO2[grepl('non', CO2$Treatment), ]
df <- data.frame(name = c('bob','robert','peter'),
id = c(1,2,3)
)
# name id
# 2 robert 2
# 3 peter 3
언급URL : https://stackoverflow.com/questions/13043928/selecting-data-frame-rows-based-on-partial-string-match-in-a-column
'programing' 카테고리의 다른 글
"sys.argv[1]"는 무엇을 의미합니까? (sys.argv는 무엇이며, 어디에서 왔습니까?) (0) | 2023.06.06 |
---|---|
ASP.net MVC의 DropDownList에 빈 값 추가 (0) | 2023.06.06 |
Spring JPA(MariaDB) 기본 키가 아닌 여러 개의 키를 외부 키로 사용할 수 있습니까? (0) | 2023.06.06 |
ggplot2 꺽은선형 차트는 "geom_path: 각 그룹은 하나의 관측치로만 구성됩니다.그룹 에스테틱을 조정할 필요가 있습니까?" (0) | 2023.06.06 |
파이어스토어의 문서에 하위 컬렉션을 추가하는 방법은 무엇입니까? (0) | 2023.06.06 |