dplyr을 사용하여 창 함수를 만들려고합니다. 각 값과 해당 그룹의 첫 번째 차이점이있는 새 벡터를 반환합니다. 이 데이터 집합 주어진 예를 들어 ,이 그룹dplyr 그룹과 첫 번째 차이점
userId libId curatorId iterationNum rf
1 1 999 1 0 5
2 1 999 2 0 10
3 1 999 1 1 0
4 1 999 2 1 15
5 1 999 1 2 30
6 1 999 2 2 40
그리고 주어진 :
userId libId curatorId iterationNum rf rf.diff
1 1 999 1 0 5 0
2 1 999 2 0 10 0
3 1 999 1 1 0 -5
4 1 999 2 1 15 -5
5 1 999 1 2 30 25
6 1 999 2 2 40 30
:
dummy<-group_by(dummy,libId,userId,curatorId)
이 결과를 줄 것인가를이 데이터 세트를 생성
dummy <- data.frame(userId=rep(1,6),
libId=rep(999,6),
curatorId=c(1:2,1:2,1:2),
iterationNum=c(0,0,1,1,2,2),
rf=c(5,10,0,15,30,40)
)
따라서 사용자, 라이브러리 및 큐레이터의 각 그룹마다 iterationNum = 0 인 rf 값을 뺀 rf 값을 얻습니다. first
함수, rank
함수 및 다른 함수를 사용하여 재생하려했지만이를 못 채지 못했습니다.
dummy %>%
group_by(userId,libId,curatorId) %>%
mutate(rf.diff = rf - subset(dummy,iterationNum==0)[['rf']])
그리고 :
:이 오류 메시지가 R 되돌아 충돌pure virtual method called terminate called after throwing an instance of 'Rcpp::exception' what(): incompatible size (%d), expecting %d (the group size) or 1`
dummy %>%
group_by(userId,libId,curatorId) %>%
mutate(rf.diff = rf - first(x = rf,order_by=iterationNum))
을
--- 편집 ---
이것은 내가 뭘하려
이 작업을 수행하는 데 필요한 모든 기능을 이미 알고있는 것으로 보입니다. 시도한 내용과 예상대로 작동하지 않은 내용을 보여줄 수 있습니까? 아마도 차이를 계산하기 전에 데이터를 정렬 (정렬)해야합니다. –
당신은 가까웠습니다. mutate 내부에서'rf-rf [iterationNum == 0]'을 대신 사용하십시오. 다른 옵션은'arrange (iterationNum)'을 파이프의 별도 단계로 사용하고 각 그룹에 rf가 0이고 no가 있다고 확신 할 경우 mutate의'rf-first (rf)'를 사용하는 것입니다 낮은 값. –
'rf-first (rf, iterationNum)' – hadley