2012-06-24 4 views
-2

으로 설정하면 다음과 같은 두 개의 열이있는 데이터 프레임이 있습니다. 값이 지정된 분기가 할당 된 분기입니다.R :리스트의 두 번째와 세 번째 값을 첫 번째 값인

quarter_number base_quarter 
1   63.44767 
1   71.12924 
1   95.58290 
2   56.85544 
2   45.89876 
2   47.88994 
3   65.54654 
... 

분기의 숫자가 3 번 반복되고 +1됩니다. 쿼터의 두 번째와 세 번째 달의 각 값에 대해 첫 번째 값과 동일한 값을 설정하는 것이 목표입니다. 그러면 다음과 같이 표시됩니다.

quarter_number base_quarter 
1   63.44767 
1   63.44767 
1   63.44767 
2   56.85544 
2   56.85544 
... 

힌트를 보내 주셔서 감사합니다.

+6

보다는 어떻게 처음부터 그것을 우리에게 요구, 우리는 일반적으로 당신이 _something_ 시도 (그리고 코드를 보여) 한 것을 증명 선호하고 작동하지 않았다 방법을 설명합니다. 그렇지 않으면 우리는 자유 노동과 같은 의심스런 느낌을 받기 시작합니다. – joran

+0

또한 여기에 설명 된대로 재현 가능한 데이터를 게시하십시오. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Andrie

+0

'my.obj [my.obj $ quarteR_number == 1] <- 63.44767'은 모두 '1'을 정의 된 숫자로 설정해야합니다. –

답변

3

사용 ave 내 접근 방식 :

여기에 좋은 답변을 몇 가지가 있습니다
R> set.seed(1) 
R> Data <- data.frame(quarter_number=rep(1:3, each=3), base_quarter=10*rnorm(9)) 
R> Data 
    quarter_number base_quarter 
1    1 -6.264538 
2    1  1.836433 
3    1 -8.356286 
4    2 15.952808 
5    2  3.295078 
6    2 -8.204684 
7    3  4.874291 
8    3  7.383247 
9    3  5.757814 
R> head1 <- function(x) head(x,1) 
R> Data$base_quarter <- ave(Data$base_quarter, Data$quarter_number, FUN=head1) 
R> Data 
    quarter_number base_quarter 
1    1 -6.264538 
2    1 -6.264538 
3    1 -6.264538 
4    2 15.952808 
5    2 15.952808 
6    2 15.952808 
7    3  4.874291 
8    3  4.874291 
9    3  4.874291 
+0

+1'ave'를 잘 사용합니다. – Andrie

+0

@ 앤드 리 : 감사합니다. 플라이어 사용을 피하기 위해 필요한 것은 무엇이든간에 ... 나는 그것을 충분히 냉각하지 못합니다. ;-) –

+0

@ JoshuaUlrich : 좋은 사람 ... 아주 똑똑한 !!!! – dickoa

1

두 번째 Joran and Andrie 코드로 재현 가능한 데이터를 게시하는 것이 좋습니다. 다음은이 문제에

set.seed(1) 
Dat <- data.frame(number = rep(1:10, each =3), value = rnorm(30)) 
head(Dat) 

    number value 
1  1 -0.62645 
2  1 0.18364 
3  1 -0.83563 
4  2 1.59528 
5  2 0.32951 
6  2 -0.82047 


require(plyr) # for join 
join(number = unique(Dat$number)), Dat, match = "first") 
Joining by: number 
    number  value 
1  1 -0.626454 
2  2 1.595281 
3  3 0.487429 
4  4 -0.305388 
5  5 -0.621241 
6  6 -0.044934 
7  7 0.821221 
8  8 0.782136 
9  9 0.619826 
10  10 -1.470752 

Dat2 <- join(data.frame(number = unique(Dat$number)), Dat, match = "first") 
Result <- Dat2[rep(1:nrow(Dat2), each = 3), ] 
head(Result)  

    number value 
1  1 -0.62645 
1.1  1 -0.62645 
1.2  1 -0.62645 
2  2 1.59528 
2.1  2 1.59528 
2.2  2 1.59528 

희망이 도움

0

. 이것은 또 다른 방법이다 :

Data <- data.frame(quarter_number=rep(1:3, each=3), base_quarter=10*rnorm(9)) 
merge(Data, Data[! duplicated(Data$quarter_number), ], 
     by='quarter_number', suffix=c('.orig', '.first')) 
관련 문제