2016-09-06 2 views
-1

저는 대학 축구 데이터의 R data.frame을 가지고 있으며, 각 게임마다 2 개의 항목이 있습니다 (각 팀당 1 개, 통계 및 기타 등등). 바이너리 Win/Loss 변수를 생성하기 위해이 점들을 비교하고 싶습니다. 그러나 어떻게 R을 잘 경험하지 못했습니다. 열을 반복하고 다른 열에 대해 일치시킬 수있는 방법이 있습니까 (게임 ID 변수가 있으므로 일치시킬 수 있음) 및 포인트 값을 비교하여 앞서 언급 한 이진수/손실 변수를 만들 수 있습니까? dataframe의다른 행에서 data.frame의 값을 비교하십시오.

발췌 (많은 변수가 왼쪽으로) :

Team Code Name  Game Code   Date   Site Points 
5   Akron  5050320051201  12/1/2005  NEUTRAL 32 
5   Akron  404000520051226 12/26/2005  NEUTRAL 23 
8   Alabama 419000820050903 9/3/2005   TEAM  37 
8   Alabama 664000820050910 9/10/2005  TEAM  43 

내가 원하는 것은 새 열, 할당되는 이진 변수를 추가하는 것입니다 1 또는 0 팀이 승패 경우에 기반. 이것을 이해하려면 게임 코드, 예를 들어 5050320051201을 가져와 동일한 게임 코드로 다른 행을 찾아야합니다 (동일한 게임 코드가있는 다른 행은 그 게임의 다른 팀에만 있음). 그리고 포인트를 비교하십시오 값을 사용하여 Win/Loss 변수에 1 또는 0을 할당합니다.

+3

데이터 프레임의 예와 출력물을 제공 할 수 있습니까? 나는 당신이 성취하고자하는 것을 정확히 이해하는 데 어려움을 겪습니다. –

+1

[재현 가능한 예제를 만드는 방법] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)을 참조하십시오. 샘플 데이터와 해당 입력에 대한 원하는 출력을 제공하십시오. 어디서 붙어 있는지 정확히 설명하십시오. – MrFlick

+0

몇 가지 예제 데이터와 더 나은 설명을 추가했습니다. – John

답변

1

데이터는 각각의 고유 한 Game Code 정확히 두 팀을 가지고 있으며, 어떤 넥타이가 없다고 가정 게임 다음의 예에 의해 주어진 :

df <- structure(list(`Team Code` = c(5L, 6L, 5L, 5L, 8L, 9L, 9L, 8L 
), Name = c("Akron", "St. Joseph", "Akron", "Miami(Ohio)", "Alabama", 
"Florida", "Tennessee", "Alabama"), `Game Code` = structure(c(1L, 
1L, 2L, 2L, 3L, 3L, 4L, 4L), .Label = c("5050320051201", "404000520051226", 
"419000820050903", "664000820050910"), class = "factor"), Date = structure(c(13118, 
13118, 13143, 13143, 13029, 13029, 13036, 13036), class = "Date"), 
Site = c("NEUTRAL", "NEUTRAL", "NEUTRAL", "NEUTRAL", "TEAM", 
"AWAY", "AWAY", "TEAM"), Points = c(32L, 25L, 23L, 42L, 37L, 
45L, 42L, 43L)), .Names = c("Team Code", "Name", "Game Code", 
"Date", "Site", "Points"), row.names = c(NA, -8L), class = "data.frame") 

print(df) 
## Team Code  Name  Game Code  Date Site Points 
##1   5  Akron 5050320051201 2005-12-01 NEUTRAL  32 
##2   6 St. Joseph 5050320051201 2005-12-01 NEUTRAL  25 
##3   5  Akron 404000520051226 2005-12-26 NEUTRAL  23 
##4   5 Miami(Ohio) 404000520051226 2005-12-26 NEUTRAL  42 
##5   8  Alabama 419000820050903 2005-09-03 TEAM  37 
##6   9  Florida 419000820050903 2005-09-03 AWAY  45 
##7   9 Tennessee 664000820050910 2005-09-10 AWAY  42 
##8   8  Alabama 664000820050910 2005-09-10 TEAM  43 

당신은 당신이 원하는 생성 dplyr를 사용할 수 있습니다,

library(dplyr) 
result <- df %>% group_by(`Game Code`) %>% 
       mutate(`Win/Loss`=if(first(Points) > last(Points)) as.integer(c(1,0)) else as.integer(c(0,1))) 
print(result) 
##Source: local data frame [8 x 7] 
##Groups: Game Code [4] 
## 
## Team Code  Name  Game Code  Date Site Points Win/Loss 
##  <int>  <chr>   <fctr>  <date> <chr> <int> <int> 
##1   5  Akron 5050320051201 2005-12-01 NEUTRAL  32  1 
##2   6 St. Joseph 5050320051201 2005-12-01 NEUTRAL  25  0 
##3   5  Akron 404000520051226 2005-12-26 NEUTRAL  23  0 
##4   5 Miami(Ohio) 404000520051226 2005-12-26 NEUTRAL  42  1 
##5   8  Alabama 419000820050903 2005-09-03 TEAM  37  0 
##6   9  Florida 419000820050903 2005-09-03 AWAY  45  1 
##7   9 Tennessee 664000820050910 2005-09-10 AWAY  42  0 
##8   8  Alabama 664000820050910 2005-09-10 TEAM  43  1 

을 여기에 우리 첫째 01,Game Code을 입력 한 다음 mutate을 사용하여 각 그룹에 대해 Win/Loss 열을 만듭니다. 여기서 논리는 단순히 firstPointslast (가정으로 2 개만있는 경우)보다 크면 열을 c(1,0)으로 설정한다는 것입니다. 그렇지 않은 경우 (0,1)으로 설정합니다. 이 로직은 타이를 처리하지는 않지만 쉽게 확장 할 수 있습니다. 공백 및 /과 같은 특수 문자 때문에 열 이름을 역 인용 부호로 묶습니다.

+0

완벽한! 고맙습니다 – John

0

는 footballdata $ SomeVariable 당신이 1 또는 0 중 하나에 의해 승리 [footballdata $가 == 수상 "1"] = 물건

전화, 따라서 이항은

R의 데이터 프레임이 점에서 좋은 있습니다

당신은 당신이 무엇을 집계 할 수 있습니다 원하는대로, 나는 단지 승리를 가진 데이터 프레임이 1을 원한다. 그런 다음 위와 같이 변수에 데이터를 설정할 수있다. 다른 데이터 프레임을 작성하여 데이터 프레임을 채우려면 동일한 양의 데이터가 있는지 확인하십시오.

footballdata $ SomeVariable [footballdata $가 == 수상 "1"] [footballdata의 $ 팀은 == "브라운은"] = 희망

+0

wins 변수를 만들어야합니다 ... 질문을 확인하고 업데이트했습니다. (희망적으로) 내 상황을 설명 할 때 더 잘 했어. – John

관련 문제