[r] 문자열 일치를 기반으로 열 선택-dplyr :: select
많은 열이있는 데이터 프레임 ( “데이터”)이 있습니다. 일부 열에는 특정 문자열 ( “search_string”)이 포함되어 있습니다.
dplyr::select()
문자열이 포함 된 열만 포함하는 하위 집합을 제공 하려면 어떻게 해야합니까?
나는 시도했다 :
# columns as boolean vector
select(data, grepl("search_string",colnames(data)))
# columns as vector of column names names
select(data, colnames(data)[grepl("search_string",colnames(data))])
둘 다 작동하지 않습니다.
select()
예를 들어 열 대신 숫자 벡터 를 허용 한다는 것을 알고 있습니다.
select(data,5,7,9:20)
하지만 ID
내 grepl()
식에서 열의 숫자 벡터를 얻는 방법을 모르겠습니다 .
답변
내 dplyr의 세계, 시도 :
select(iris,contains("Sepal"))
의 선택 섹션을 참조하십시오 ?select
수많은 다른 도우미가 좋아 위해 starts_with
, ends_with
등
답변
당신은 시도 할 수 있습니다:
select(data, matches("search_string"))
그것은보다 더 일반적이다 contains
– 당신은 (예를 정규식 사용할 수 있습니다 "one_string|or_the_other"
).
더 많은 예는 http://rpackages.ianhowson.com/cran/dplyr/man/select.html을 참조하십시오 .
답변
사용할 필요는 select
단지 사용하지 않는 [
대신
data[,grepl("search_string", colnames(data))]
iris
데이터 세트를 사용해 보겠습니다.
>iris[,grepl("Sepal", colnames(iris))]
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
답변
Piotr Migdals 응답을 기반으로 문자열 벡터에 대한 가능성을 가능하게하는 대체 솔루션을 제공하고 싶습니다.
myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))
정규식 OR
연산자 ( |
) 사용
주의 : 열 이름의 일반 벡터가 실제로 있고 RegExpression의 힘이 필요하지 않은 경우이 답변 아래의 주석을 참조하십시오 (깨끗한 솔루션이므로).