[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)

하지만 IDgrepl()식에서 열의 숫자 벡터를 얻는 방법을 모르겠습니다 .



답변

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의 힘이 필요하지 않은 경우이 답변 아래의 주석을 참조하십시오 (깨끗한 솔루션이므로).


답변