2013-10-19 4 views
-1

나는 아카이브를 통해 검색했고이 문제에 관해서는 관련 데이터 프레임 2 개, 데이터 프레임 하나는 키, 다른 하나는 연례리스트 , 하위 집합과 색인을 만드는 데 키를 사용하고 싶습니다. 하위 집합 수식을 사용하여 시도했지만 내 코드가 내 기준을 충족하지 못합니다.서브 세트 및 합치기 2에서 관련된 데이터 프레임 r

players <- c('Albert Belle','Reggie Jackson', 'Reggie Jackson') 
contract_start_season <- c(1999,1977,1982) 
contract_end_season <- c(2003, 1981, 1985) 
key <- data.frame (player = players, contract_start_season, contract_end_season) 
player_data <- data.frame(season = c(seq(1975,1985),seq(1997,2003)), player = c(rep('Reggie Jackson',times=11),rep('Albert Belle', times=7))) 

내가 2003 년에 1981 년 잭슨 1977 후 1982 그래서 벨 1999 1985 앨버트을 위해, 그 동안의 선수 데이터를 서브 세트 키를 사용하려면 나는 또한 좋겠 : 여기에 데이터는 예를 들어 레지 잭슨 1977 년 1 될 수 있도록

... 1천9백78년, 나는이 같은 모습을 병합하지 않고 시도 코드를이 요법을 인덱스를 만들려면 그것은 작동하지 않습니다 :

player_data[player_data$season >= key$contract_start_season&player_data$season <= key$contract_end_season,] 

Reggie Jackson은 2 년의 계약 기간이 있기 때문에 병합시에도 문제가 발생합니다. 둘 다 병합하려고합니다.

이에 대한 도움이나 조언을 주시면 감사하겠습니다.

답변

1

다음 줄을 따라 뭔가를하려고합니까?

library(data.table) 

key <- data.table(key) 
player_data <- data.table(player_data) 

#Adding another column called season to help in the merge later 
key[,season := contract_start_season] 

# Index on which to merge 
setkeyv(key, c("player","season")) 
setkeyv(player_data, c("player","season")) 

#the roll = Inf makes it like a closest merge, instead of an exact merge 
key[player_data, roll = Inf] 

출력 :

> key[player_data, roll = Inf] 
      player season contract_start_season contract_end_season 
1: Albert Belle 1997     NA     NA 
2: Albert Belle 1998     NA     NA 
3: Albert Belle 1999     1999    2003 
4: Albert Belle 2000     1999    2003 
5: Albert Belle 2001     1999    2003 
6: Albert Belle 2002     1999    2003 
7: Albert Belle 2003     1999    2003 
8: Reggie Jackson 1975     NA     NA 
9: Reggie Jackson 1976     NA     NA 
10: Reggie Jackson 1977     1977    1981 
11: Reggie Jackson 1978     1977    1981 
12: Reggie Jackson 1979     1977    1981 
13: Reggie Jackson 1980     1977    1981 
14: Reggie Jackson 1981     1977    1981 
15: Reggie Jackson 1982     1982    1985 
16: Reggie Jackson 1983     1982    1985 
17: Reggie Jackson 1984     1982    1985 
18: Reggie Jackson 1985     1982    1985 
+0

하지만 1981 년 1977 것 예 레지 잭슨 년 있도록 키에없는 년을 제외 할의 정렬 후 1985 년과 앨버트 후 1982 Belle은 1999 년에서 2003 년 사이에 나올 것입니다. 합병에 대해서는 열쇠로 설정된 기준에 따라 부분 집합을 할 수 있기를 바랍니다. – abresler

+0

실제로 NA를 꺼내는 것만으로도 나는 생각합니다! 그것을 시도하자. – abresler

+0

'key [player_data, roll = Inf] [! is.na (contract_start_season)]'시도하자. – TheComeOnMan

관련 문제