2017-02-28 11 views
0

두 개의 열에 동시에 데이터 컨디셔닝의 하위 집합을 만들고 싶습니다.두 개의 열을 결합하여 서브 셋팅

유사 여기에 예를 들면 다음과 같습니다 subsetting data using multiple variables in R

:

 Games People Hoursplayed 
    goldeneye Michael   5 
    goldeneye Thatcher   8 
    goldeneye Dexter   12 
    goldeneye Dexter   15 
     pacman Dexter   2 
     tetris  Clint   5 
     tetris Dexter   8 
    goldeneye Thatcher   12 
     pacman Thatcher   15 
    goldeneye  Clint   2 
     pacman Michael   5 
     pacman Michael   8 
     pacman  Clint   12 
     tetris  John   15 
     tetris  Clint   2 
ageofempires  Clint   5 
     pacman Dexter   8 
ageofempires Thatcher   12 
ageofempires  John   15 
    goldeneye Dexter   2 

내가 골든 같은 게임을보고 할 말 :

내가 Gamedat라는이 데이터 집합을 말한다. 그리고 저는 어떤 플레이어가 금을 사용하는 것과 같은 시간 동안 다른 게임을 얼마나 자주했는지보고 싶습니다 (실제 데이터 세트에서 훨씬 유용합니다).

그래서 나는이 작업을 수행 :

Gameofinterest <- Gamedat[ grep("goldeneye", Gamedat[ ,1]), ]` 

그럼 내가 할이 :

subset(Gamedat, Gamedat[ ,2] %in% Gameofinterest[ ,2] & 
    Gamedat[ ,3] %in% Gameofinterest[ ,3]) 

그러나 이것은 나에게 제공합니다

:

 Games People Hoursplayed 
    goldeneye Michael   5 
    goldeneye Thatcher   8 
    goldeneye Dexter   12 
    goldeneye Dexter   15 
     pacman Dexter   2 
     tetris Clint   5 
     tetris Dexter   8 
    goldeneye Thatcher   12 
     pacman Thatcher   15 
    goldeneye Clint   2 
     pacman Michael   5 
     pacman Michael   8 
     pacman Clint   12 
     tetris Clint   2 
ageofempires Clint   5 
     pacman Dexter   8 
ageofempires Thatcher   12 
    goldeneye Dexter   2 

내가 정말 원하는 것은이 때

  Games People Hoursplayed 
    goldeneye Michael   5 
    goldeneye Thatcher   8 
    goldeneye Dexter   12 
    goldeneye Dexter   15 
     pacman Dexter   2 
    goldeneye Thatcher   12 
    goldeneye Clint   2 
     pacman Michael   5 
     tetris Clint   2 
    ageofempires Thatcher   12 
    goldeneye Dexter   2 
한마디로 63,210

, 나는

대신 "사람들"& "Hoursplayed"의

... 의미를, "사람들 & Hoursplayed"일치 예제를 찾을까요?

Gamedat$PHpaste <- paste(Gamedat$People, Gamedat$Hoursplayed, sep="") 

Gamedat[Gamedat[ ,4] %in% Gameofinterest[ ,4], ] 

를 얻을 :

는 내가이 작업을 수행 할 수 있습니다 알고

 Games People Hoursplayed PHpaste 
    goldeneye Michael   5 Michael5 
    goldeneye Thatcher   8 Thatcher8 
    goldeneye Dexter   12 Dexter12 
    goldeneye Dexter   15 Dexter15 
     pacman Dexter   2 Dexter2 
    goldeneye Thatcher   12 Thatcher12 
    goldeneye Clint   2  Clint2 
     pacman Michael   5 Michael5 
     tetris Clint   2  Clint2 
ageofempires Thatcher   12 Thatcher12 
    goldeneye Dexter   2 Dexter2 

이 더 우아한 뭔가를 기대했다?

+0

원하는 결과가 정확합니까? 덱스터는 2 시간 동안 팩맨을 뛰었지만 29 시간 동안 금을 놀았습니다 ... 29 시간 중 2 시간이 독특한 기록의 일부이기 때문에 그게 맞습니까? – shayaa

+0

마지막 행은 덱스터가 2 시간 동안 금을 놀았 음을 보여주기 때문에 정확한 일치입니다. – StatGenGeek

답변

0

나는 이것이 dplyr을 사용하여 달성 될 수 있다고 생각합니다. 먼저, 필터를 사용하여 게임이 황금색 인 행을 검색하십시오. 그런 다음 inner_join을 사용하여 People 및 HoursPlayed를 사용하여 원본 데이터에 참여하십시오. 선택 사항 : 원하는 열을 선택하고 사람별로 정렬하십시오.

library(dplyr) 
Gamedat %>% 
    filter(Games == "goldeneye") %>% 
    inner_join(Gamedat, by = c("People", "Hoursplayed")) %>% 
    select(Games = Games.y, People, Hoursplayed) %>% 
    arrange(People) 

결과 :

  Games People Hoursplayed 
1  goldeneye Clint   2 
2  tetris Clint   2 
3  goldeneye Dexter   12 
4  goldeneye Dexter   15 
5  pacman Dexter   2 
6  goldeneye Dexter   2 
7  goldeneye Michael   5 
8  pacman Michael   5 
9  goldeneye Thatcher   8 
10 goldeneye Thatcher   12 
11 ageofempires Thatcher   12 
+0

아름답습니다. – StatGenGeek