R dplyr : 여러 열 삭제
삭제하려는 데이터 프레임과 해당 데이터 프레임에 열 목록이 있습니다. 하자의 사용 iris
예를 들어 데이터 집합을. 나는 드롭하고 싶습니다 Sepal.Length
과 Sepal.Width
만 나머지 열을 사용합니다. 패키지를 사용 select
하거나 패키지 select_
에서 어떻게 수행 dplyr
합니까?
지금까지 시도한 내용은 다음과 같습니다.
drop.cols <- c('Sepal.Length', 'Sepal.Width')
iris %>% select(-drop.cols)
-drop.cols 오류 : 단항 연산자에 대한 잘못된 인수
iris %>% select_(.dots = -drop.cols)
-drop.cols 오류 : 단항 연산자에 대한 잘못된 인수
iris %>% select(!drop.cols)
! drop.cols 오류 : 잘못된 인수 유형
iris %>% select_(.dots = !drop.cols)
! drop.cols 오류 : 잘못된 인수 유형
이미 존재해야하는 꽤 유용한 작업처럼 보이기 때문에 분명한 것을 놓치고있는 것 같습니다. Github에서 누군가 비슷한 문제를 게시 했고 Hadley는 '네거티브 인덱싱'을 사용한다고 말했습니다. 그게 (내 생각에) 시도했지만 아무 소용이 없습니다. 어떤 제안?
select_vars에 대한 도움말을 확인하십시오. 이 작업을 수행하는 방법에 대한 몇 가지 추가 아이디어를 제공합니다.
귀하의 경우 :
iris %>% select(-one_of(drop.cols))
또한 시도
## Notice the lack of quotes
iris %>% select (-c(Sepal.Length, Sepal.Width))
그 외에도 모든 특정 열 이름을 정의하지 않는 select(-one_of(drop.cols))
사용하여 열을 삭제하는 몇 가지 다른 옵션이 있습니다 select()
(열 이름의 다양성에 대해 dplyr starwars 샘플 데이터 사용).
starwars %>%
select(-(name:mass)) %>% # the range of columns from 'name' to 'mass'
select(-contains('color')) %>% # any column name that contains 'color'
select(-starts_with('bi')) %>% # any column name that starts with 'bi'
select(-ends_with('er')) %>% # any column name that ends with 'er'
select(-matches('^f.+s$')) %>% # any column name matching the regex pattern
select_if(~!is.list(.)) %>% # not by column name but by data type
head(2)
# A tibble: 2 x 2
homeworld species
<chr> <chr>
1 Tatooine Human
2 Tatooine Droid
우리는 시도 할 수 있습니다
iris %>%
select_(.dots= setdiff(names(.),drop.cols))
select()
dplyr 및 MASS 패키지 모두에서 사용되므로 함수에 주의하십시오. MASS가로드되면 select ()가 제대로 작동하지 않을 수 있습니다. 로드 sessionInfo()
된 패키지를 확인하려면 "기타 첨부 된 패키지 :"섹션에서 해당 패키지를 입력 하고 찾으십시오. 로드 된 경우을 입력 detach( "package:MASS", unload = TRUE )
하면 select()
함수가 다시 작동합니다.
또 다른 방법은 원하지 않는 열을로 변경하는 것입니다 NULL
. 이렇게하면 삽입 된 괄호를 피할 수 있습니다.
head(iris,2) %>% mutate_at(drop.cols, ~NULL)
# Petal.Length Petal.Width Species
# 1 1.4 0.2 setosa
# 2 1.4 0.2 setosa
열 이름에 특수 문자가있는 경우 select
또는 select_
예상대로 작동하지 않을 수 있습니다. 이 재산 dplyr
의 사용 "."
. 질문의 데이터 세트를 참조하기 위해 다음 행을 사용하여이 문제를 해결할 수 있습니다.
drop.cols <- c('Sepal.Length', 'Sepal.Width')
iris %>% .[,setdiff(names(.),drop.cols)]
당신은 시도 할 수 있습니다
iris %>% select(-!!drop.cols)
참고 URL : https://stackoverflow.com/questions/35839408/r-dplyr-drop-multiple-columns
'Development Tip' 카테고리의 다른 글
PHP 경고 : 알 수 없음 : 스트림을 열지 못했습니다. (0) | 2020.11.09 |
---|---|
백본에서 상위 클래스에 액세스 (0) | 2020.11.09 |
DataGridView에 선택한 행이 표시되도록하려면 어떻게해야합니까? (0) | 2020.11.09 |
.translate ()를 사용하여 Python 3.x의 문자열에서 구두점을 제거하는 방법은 무엇입니까? (0) | 2020.11.09 |
Python 문자열에서 허용 목록에없는 HTML 태그 제거 (0) | 2020.11.09 |