2017-05-08 3 views
0

동일한 열을 포함하는 2 개의 데이터 프레임이 있습니다. 하나는 newGames이고, 다른 하나는 existingGames입니다. 내가 뭘하고 싶은지 두 데이터 프레임 사이에 newGames game_pk 및 sv_id 열을 comapare 확인하십시오. game_pk 및 sv_id 두 테이블에 존재하는 경우 newGames 데이터 프레임에서 해당 행을 제거하려면 싶습니다.다른 데이터 프레임에 2 개의 값이있는 경우 행을 삭제하십시오.

 N.game_pk N.sv_id   E.game_pk E.sv_id 
1  440697  123456_789012  NA   NA 
2  440698  123456_789012  440698  NA 
3  440699  123456_789012  440699  123456_789012 

e. existingGames 데이터 프레임을 나타내고 N은 newGames 데이터 프레임을 나타냅니다. 마지막으로 가지고 싶은 것은 기존의 게임 데이터 프레임에 egame_pk 및 e.sv_id (전체 게임) 또는 e.sv_id (게임에서 단일 피치)가없는 모든 열을 표시하는 newGames 데이터 프레임입니다. Sv_id는 타임 스탬프이므로 다른 game_pk에 대해 동일한 값을 가질 수 있으므로 필드를 "결합"하면 행이 고유하게됩니다.

이 없습니다 게임 (440697)

newGames2 <- newGames[!(newGames$game_pk %in% existingGames$game_pk),] 

작동하지만

newGames2 <- newGames[!(newGames$game_pk %in% existingGames$game_pk) | (!(newGames$game_pk %in% existingGames$game_pk) & !(newGames$sv_id %in% existingGames$sv_id)),] 

을 시도하고는 대신에 하나의 누락 피치의 전체 데이터 프레임을 선택합니다. 여기

+2

|' –

+0

당신이 보여줄 수 newGames 및 existingGames 데이터 프레임의 샘플? 'dplyr' 패키지에서'anti_join'을 봐야합니다. – Gopala

+0

@Gopala 어떻게 할 수 있습니까? 참고 - 데이터 프레임에는 76 개의 열이 있습니다. 감사! –

답변

2

어떻게 할의 그 dplyr에서 anti_join과 :

new_game <- read.table(text="game_pk sv_id 
440697  123456_789012 
440698  123456_789012 
440699  123456_789012",header=TRUE,stringsAsFactors=FALSE) 

existing_game <- read.table(text="game_pk sv_id 
NA   NA 
440698  NA 
440699  123456_789012",header=TRUE,stringsAsFactors=FALSE) 

library(dplyr) 
anti_join(new_game,existing_game) 

    game_pk   sv_id 
1 440698 123456_789012 
2 440697 123456_789012 
당신은 아마`&`대신`의 사용해야
+0

당신의 코드를 사용하여 그것을 테스트 할 때 나는 = c ("game_pk", "sv_id")에 의한 Joining을 본다. 내가 실제 테이블에 대해 실행할 때 = c ("game_pk", "sv_id")에 의해 동일한 작업이 수행되지만, 3207 레코드가 1 대신에 반환됩니다. ExistingGames에는 3206 개의 레코드가 있고 newGames에는 3207이 있습니다. 하나가 빠진 피치를 반환합니다. 다른 game_pk에 sv_id가 있으면이 문제가 발생합니까? –

+0

두 테이블의 열이 같은 클래스이고 요인이 없는지 확인하십시오. 'str (new_game)'과'str (existing_game)'은 비슷해야합니다. –

+1

또한 두 열에 만 조인한다고했지만 두 데이터 프레임에는 모두 74 개의 열이 있습니다. 어쩌면 당신은 다음과 같이 특정 열을 결합하도록 지정할 수 있습니다 :'anti_join (new_game, existing_game, by = c ("game_pk", "sv_id"))' –

관련 문제