2017-12-03 2 views
-2

그래서 같은 데이터 프레임 구조를 가지고 : 나는 열을 드롭 할

> head(peakQ) 
    STATION_NUMBER DATA_TYPE YEAR PEAK_CODE PRECISION_CODE MONTH DAY HOUR MINUTE TIME_ZONE PEAK SYMBOL 
1  05EE006   Q 1983   H    NA  6 29 5  18  MST 1.980  
2  05EE006   Q 1985   H    NA  4 2 0  0  MST 1.380  B 
3  05EE006   Q 1986   H    NA  3 30 13  37  MST 2.640  
4  05EE006   Q 1987   H    NA  4 5 21  2  MST 1.590  B 
5  05EE006   Q 1989   H    NA 10 22 2  45  MST 0.473  
6  05EE006   Q 1990   H    NA  4 2 4  2  MST 1.470  

; STATION_NUMBER, DATA_TYPE, PEAK_CODE, PRECISION_CODE

그러나 나는 인덱스 만 알고 있고 인덱스는 아는 것으로 가정하고 싶습니다.

나는 이미 같은 인덱스를 사용하는 사소한 것을 알고 : 나는 열 이름을 사용하여 오류가 왜

> head(peakQ[, -c(1, 2, 4, 5)]) 
    YEAR MONTH DAY HOUR MINUTE TIME_ZONE PEAK SYMBOL 
1 1983  6 29 5  18  MST 1.980  
2 1985  4 2 0  0  MST 1.380  B 
3 1986  3 30 13  37  MST 2.640  
4 1987  4 5 21  2  MST 1.590  B 
5 1989 10 22 2  45  MST 0.473  
6 1990  4 2 4  2  MST 1.470  

하지만, 을? 해결 방법은 무엇입니까? 반대 동작이 잘 작동하기 때문에

> head(peakQ[, -c("STATION_NUMBER", "DATA_TYPE", "PEAK_CODE", "PRECISION_CODE")]) 
Error in -c("STATION_NUMBER", "DATA_TYPE", "PEAK_CODE", "PRECISION_CODE") : 
    invalid argument to unary operator 

나는 특히 혼란 스러워요.

어떤 도움이나 더 깊은 설명을 부탁드립니다.

답변

1

"제외"연산자는 열 이름이 아닌 인덱스에서만 작동하는 것으로 보입니다. 이 문제를 해결할 수있는 방법은 열 이름을 % in % 및! 연산자 :

> cols <- letters[1:5] 
> cols 
[1] "a" "b" "c" "d" "e" 
> df1 <- as.data.frame(do.call(cbind, rep(list(1:5), 5))) 
> names(df1) <- cols 
> df1 
    a b c d e 
1 1 1 1 1 1 
2 2 2 2 2 2 
3 3 3 3 3 3 
4 4 4 4 4 4 
5 5 5 5 5 5 
> df1[,-c("a","b")] 
Error in -c("a", "b") : invalid argument to unary operator 
> df1[,!names(df1) %in% c("a","b")] 
    c d e 
1 1 1 1 
2 2 2 2 
3 3 3 3 
4 4 4 4 
5 5 5 5 
+0

pls는 응답하기 전에 유사한 qsns를 찾습니다. – skrubber

2

문자 벡터에는 빼기 연산자가 없습니다. 그러나 subset은 평가되지 않은 이름의 벡터를 사용하여이를 시뮬레이션하려고 시도합니다. dplyr select에 대해서도 마찬가지입니다. 빼기 연산자가 필요없는 setdiff을 사용할 수도 있습니다.

subset(peakQ, select = - c(STATION_NUMBER, DATA_TYPE, PEAK_CODE, PRECISION_CODE)) 

2) 또 다른 가능성은 setdiff : 다음 select= 인수 subset을 시도

1) 부분

peakQ[setdiff(names(peakQ), c("STATION_NUMBER","DATA_TYPE","PEAK_CODE","PRECISION_CODE"))] 

3) dplyr select도 할 수있는 dplyr 패키지의 사용할 수 있습니다 :

library(dplyr) 
peakQ %>% 
     select(- c(STATION_NUMBER, DATA_TYPE, PEAK_CODE, PRECISION_CODE))