2013-11-09 2 views
0

나는 year | country | growth_rate 열이있는 데이터 프레임을 가지고 있습니다. 각 나라의 성장률을 내가 선택한 다른 나라와 비교하고 주어진 해에 더 높은 성장률을 보인 국가를 필터링하고 싶습니다. 데이터 프레임에서 값과 필터링 비교

은 그래서 첫 번째 단계는 성장 모든 국가의 요금과 나의 선택 국가 사이의 차이를 가지고하는 것입니다 생각, 나는 여기까지 얻을 수 있었다 :

difference <- ddply(data, .(year), transform, 
     x=growth_rate - 4) 

이 나에게 첫 번째 데이터 프레임을 줄 것이라고 내가 원한다면, 하드 코딩 된 코드 만이 해당 연도에 선택한 국가의 성장률 (캐나다라고합시다)이어야합니다. 나는 다음과 같이 시도했다.

difference <- ddply(data, .(year), transform, 
      x=growth_rate - data[country=="Canada",]$growth_rate) 

그러나 이것은 올바르지 않다.

일단 이것이 올바른 것이면 다음 단계는 x> 0 인 행만 필터링하는 것입니다.

도움을 주시면 감사하겠습니다.

이 내 데이터 프레임이 어떻게 생겼는지입니다 : 바로 질문을 이해하면

> head(data) 
    iso2c country  growth_rate year 
1 1A Arab World   3.911548 2012 
2 1A Arab World   5.282387 2011 
3 1A Arab World   4.648676 2010 
4 1A Arab World   2.253365 2009 
5 1A Arab World   6.509886 2008 
6 1A Arab World   5.634384 2007 

답변

1

-이 dt는 모습입니다

library(data.table) 

# some random data 
dt <- data.table(
    year = c(rep(2013,4),rep(2012,4),rep(2011,4)), 
    country = rep(c('A','B','C','D'),3), 
    growth_rate = runif(12,0,10) 
) 

# country to compare 
countrycompared <- 'B' 

# creating the new dataset where growth rate is higher that country to compare in that year 
dt2 <- dt[, 
      ToKeep := growth_rate > .SD[country == countrycompared,growth_rate 
             ], 
      by = year][ToKeep == TRUE] 

같은 -

> dt 
    year country growth_rate 
1: 2013  A 3.175187 
2: 2013  B 3.693736 
3: 2013  C 4.080300 
4: 2013  D 9.692282 
5: 2012  A 7.212747 
6: 2012  B 8.343452 
7: 2012  C 6.606016 
8: 2012  D 8.516030 
9: 2011  A 6.361843 
10: 2011  B 8.318292 
11: 2011  C 4.682559 
12: 2011  D 2.081757 

그리고 dt2 -

> dt2 
    year country growth_rate ToKeep 
1: 2012  A 4.038502 TRUE 
2: 2012  D 8.113058 TRUE 
+0

감사합니다. data.table 라이브러리에 익숙하지 않았습니다. 이 데이터를 다음과 같은 오류가 발생하면 오류가 발생합니다. '[.data.frame' (데이터,,': ='(ToKeep, growth_rate> .SD [country == : 사용되지 않은 인수 – user1754606

+0

죄송합니다.이 코멘트 기능은 끔찍합니다. 나는 year라는 열을 가지고 있는데, 제 질문에 추가했습니다. – user1754606

+0

이 코드를 사용하려면 먼저'data.table' 패키지를 설치해야합니다 .dt를 data.frame으로 선언하십시오. data.table 특정 기능을 사용하기 때문에 코드가 작동하지 않게됩니다. – TheComeOnMan