2017-11-05 11 views
0

에서 그룹에 의해 이전 값을 추출합니다나는 데이터 프레임이 다른 그룹 열

ID_1 <- c("A","B","C","D","A","A","B","E","D","F","H") 
ID_2 <- c("G","D","I","A","J","B","K","D","A","H","A") 
Value <- c(10,9,15,27,3,28,4,3,11,19,12) 
DF <- as.data.frame(cbind(ID_1, ID_2, Value)) 

내가 마지막을 포함하는 새 열을,하고 싶은 (즉, 선행) 가치 ('값') 다른 열 ('ID_2')의 해당 ID를 기반으로 주어진 ID ('ID_1') 다른 말로하면 : 주어진 솔루션은 주어진 ID ('ID_1')에 대해 가장 최근/마지막 ID 항목 ('ID_2')을 찾아 새 값에 해당 값 ('값')을 추출해야합니다.

최종 데이터 세트는 다음과 같이한다 (하나의 새로운 열이 기존의 세 개의 컬럼에 추가됩니다 그림) :

NEW <- c(NA,NA,NA,9,27,27,28,NA,3,NA,19) 
DF_NEW <- as.data.frame(cbind(ID_1, ID_2, Value, NEW)) 

감사를 사전에 도움을!

답변

1

하나의 옵션은 다음, DF에 행 번호 열을 생성 data.table 롤링을 사용하는 것입니다 가입 :

library(data.table) 
setDT(DF)[, rn := seq_len(.N)] 

DF[DF, 
    on=.(ID_2 = ID_1, rn = rn), 
    .(ID_1 = i.ID_1, ID_2 = i.ID_2, Value = i.Value, New = x.Value), 
    roll=Inf 
] 

# ID_1 ID_2 Value New 
# 1: A G 10 NA 
# 2: B D  9 NA 
# 3: C I 15 NA 
# 4: D A 27 9 
# 5: A J  3 27 
# 6: A B 28 27 
# 7: B K  4 28 
# 8: E D  3 NA 
# 9: D A 11 3 
#10: F H 19 NA 
#11: H A 12 19 
+0

쿨 :) 작품! 고마워, Psidom! – Daniel

+0

반갑습니다. 다행 이구나! – Psidom