2017-05-04 2 views
1

제가 그 열 중 하나의 값이, column를 호출하는 행함으로써 df를 호출 기존 데이터 프레임을 부분 집합에 의해, 새로운 데이터 프레임 df2을 만들려는, 비 - 제로이다. 내가 처음 시도 무엇R에서 마이너스/세트 보수 연산자를 올바르게 사용하는 방법은 무엇입니까?

했다 :

df2 <- df[-(df$column == 0), ] 

그러나, 문제가 해결되지 않았다. 두 번째는 일을 왜

df2 <- df[(df$column != 0), ] 

내가 얻을 수 있지만, 첫 번째는 operator overloading을 제외하고 작동하지 않았는지 이해가 안 돼요 : 어떤 일을했던 것은이었다.

특히 -(df$column == 0)(df$column !=0)을 실행하면 전자는 논리적 인 벡터가 아니지만 논리 벡터 (df$column == 0)의 -1 배를 반환합니다. 그래서 모든 곳에서 값 1을 원했고, 값 0을 가졌으며, 값 0을 원했던 곳은 -1이었습니다. 지금은 그것을 해결하기 어려운되지 않았을 것입니다 알고,
1 -(df$column == 0)를 작성하여 말하지만, 요점은 내가 그것을 설정 보수 연산자로 동작 할 것으로 예상, 운영자 - 그런 식으로 행동하는 기대하지 않았다이다. (즉 난 문제가있을 것이라고 예상하지 않았다, 그래서 문제를 해결하는 방법에 대해 생각하지 않았습니다.)

콘크리트 질문 : 어떻게 R 언어를 결정 않습니다 여부를 언제 -를 해석하는 방법 연산자로 : (1) 세트 보수 연산자 (2) 빼기 연산자 (3) -1 곱하기?

내가 찾은 모든 문서는 연산자 -을 (2) 빼기 연산자로만 처리하지만 R이 (1)과 (3)을 어떻게 구별하는지는 언급하지 않습니다.

또한, 내가 알고 (2)와 (3) 더 많거나 적은 수학적으로 동일하지만 자신의 구현이 동일하다는 것을 의미하지 않을 수 있습니다. (MATLAB의 일예 행렬 반전).

+3

인덱싱의 빼기는 논리적 인덱스가 아닌 숫자 인덱스에서 작동합니다. '-' 연산자가 특별하기 때문에가 아니고,'['는 음의 인덱스를 음의 선택으로 처리하기 때문입니다. – Axeman

답변

2

숫자 0과 1을 사용하고 있기 때문에 복잡하다고 생각합니다.이 숫자는 TrueFalse의 숫자입니다.

> df1$column==3 
[1] FALSE TRUE 

때문에 : (df$column==3) 수익률이 개 논리 값을 호출

df<- data.frame(column = matrix(c(2,3), nrow=2)) 
> df 
    column 
1  2 
2  3 

: 그래서 위의 df는 두 개의 행과 다른 번호를 가지고있는 경우를 사용하여 코드에 무엇이 잘못되었는지 설명하려고합니다 TRUE=1FALSE=0을 호출 할 때 df[-(df$column == 3), ]을 호출하면 df[-(c(0,1),]을 호출하는 것과 같습니다. 두 경우 모두 첫 번째 행을 제거하기 때문에 (R에서는 0- 색인 없음) 당신이 1 행을 유지하는이 시간 때문에, df[(df$column != 3),]를 호출 할 때

> df1[-(df1$column==3),] 
[1] 3 
> df1[-c(0,1),] 
[1] 3 

반대의 사실이다.

> df[(df$column != 3),] 
[1] 2 
> df[c(1,0), ] 
[1] 2 

은 무엇 당신이하려고했던 것은 df$column==3에 대한 행을 제거하지만, 당신이 인덱스를 필요로하므로 위하여 그에게 당신은 그것이 무엇인지 행 번호를 알 필요가있다. 그 때 which 함수를 호출합니다. 그래서 당신이 할 것이다 : 그 외에는

df2 <- df[-which(df1$column == 3),] 

-R에서 어떻게 사용되는지에 대한 이해가 정확한지, 나는 R 컨텍스트를 기반으로, 그것을 사용하는 방법을 결정한다 생각합니다.

면책 사항 오랫동안 유감스럽게 생각합니다.

+0

이것은 도움이됩니다. 감사합니다. R이 0 색인 생성 또는 음수 색인 생성을하지 않았다는 것을 몰랐습니다. – Chill2Macht

2

- 오퍼레이터가 하나 개 또는 2 개의 인수를 취하는 함수로 구현된다.

> `-` 
function (e1, e2) .Primitive("-") 

그래서 표현 -a-(a)을 의미하는 것으로 해석되고 a - b-(a, b)로 해석됩니다. 첨가제 역 반환 - 하나 개의 인수로

(즉., 인수의 부호를 반전), 그리고 두 개의 인수가 빼기를한다.

> `-`(3) 
[1] -3 
> `-`(3, 1) 
[1] 2 

설정 작업을 수행하지 않습니다.