2016-10-28 4 views
-3

final dataset에 ID가 다음 꼬리 마지막 n 요소 ID가 0 마지막 n 개의 행을 제거하고.부착으로 I 데이터 집합을 R

나는 ID로
진에있는 모든 마지막 0을 제거한 다음 ID로 에 대한 꼬리 3을 선택합니다. (참고 : ID 2 만 2
W5를 remainng 및 W6). 그것은 최종 데이터 세트와 같을 것입니다.

효율적인 방법이 있습니까?

+1

난 당신이 더 – rawr

+0

를 포맷하세요? 내가보고 최종 및 원본 데이터 집합 사이의 유일한 차이점은 최종 제거 모든 후행 0을 가지고 있다는 것입니다. – useR

+0

을 요구하고 무슨 생각이 없다,하지만 당신은 "ID에 의해 선택 꼬리 3"에 의해 무엇을 의미합니까 질문 – useR

답변

0

어떻게 이런 일에 대해?

ID = c(rep(1, 8), rep(2, 4), rep(3, 8)) 
week = c(2:9, 5:8, 13:20) 
binary = c(0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0) 

dataset = data.frame(ID, week, binary) 

> dataset 
    ID week binary 
1 1 2  0 
2 1 3  1 
3 1 4  1 
4 1 5  1 
5 1 6  1 
6 1 7  0 
7 1 8  0 
8 1 9  0 
9 2 5  1 
10 2 6  1 
11 2 7  0 
12 2 8  0 
13 3 13  1 
14 3 14  1 
15 3 15  1 
16 3 16  0 
17 3 17  0 
18 3 18  1 
19 3 19  0 
20 3 20  0 

솔루션 :

# Split dataset by ID 
byGroupDf = split(dataset, ID) 

# For each grouped dataset, take only rows up till the last row where ID not equal to 0 
byGroupFinal = lapply(byGroupDf, function(x) tail(x[1:max(which(x$binary != 0)),], 3)) 

# Combine the grouped datasets 
FinalDf = do.call(rbind, byGroupFinal) 

> FinalDf 
    ID week binary 
1.3 1 4  1 
1.4 1 5  1 
1.5 1 6  1 
2.9 2 5  1 
2.10 2 6  1 
3.16 3 16  0 
3.17 3 17  0 
3.18 3 18  1 
+1

나는 최종 데이터 세트에 대한 권리를 부착했다. byGroupFinal = lapply (byGroupDf 함수 (x)의 꼬리 (엑스 [1 :! 맥스 (($ X의 이진 = 0)), 3)). 꼬리 3을 코드에 추가하면 원하는 것을 얻을 수 있습니다. 감사합니다 – MLM

+0

@ MLM 내 대답을 편집했습니다. 이게 니가 원하는거야? – useR

관련 문제