2016-07-14 3 views
-1

다음과 같이 활동 a, b 및 c를 포함하는 데이터 세트가 있습니다.특정 요인 뒤에 계수 요인

User-ID Date   Activity  Number of activity 
1  03.04.2014   a    3 
1  04.04.2014   c    2 
2  05.06.2014   a    3 
1  12.06.2014   b    2 
1  06.10.2014   b    1 
3  10.11.2014   a    3 
1  05.11.2014   c    2 
1  06.12.2014   a    1 
2  06.12.2014   b    3 
2  07.12.2014   a    4 
2  07.12.2014   c    2 
2  08.12.2014   a    1 
3  08.12.2014   b    3 

내가 활동 마지막 활동 b 이후 각 사용자에 대한 ac의 합을 표시하는 코드를 작성하고 싶습니다. 예를 들어; 사용자 ID : 1에는 활동 "a"및 "c"가 있습니다. 활동 후 총 3 회 b. 특정 요인 후에 활동 수를 계산하는 방법은 무엇입니까? (여기에서 : 마지막 "B"보낸) 사용자 ID : 1 총 활성 : 3 사용자 ID : 2 총 활동 7 사용자 ID : 3 총 활성 0

+0

당신이 예상 출력을 표시 할 수 있습니다 : 이제

df$Date <- as.Date(as.character(df$Date), format='%d.%m.%Y') 

당신이 할 수있는 모든 사용자 ID의 마지막 'B'후 'B'이외의 활동의 수를 얻으려면? 귀하의 예를 바탕으로, 사용자 ID 1은 마지막 'b'다음에 'c'와'a' 만 갖습니다. – akrun

+0

안녕하세요, 예상 결과를 추가했습니다. 결과 : 사용자 ID : 1 총 활동 : 3 사용자 ID : 2 총 활동 : 7 사용자 ID : 3 총 활동 : 0 예를 들어, 사용자 2는 마지막 b 활동 이후 a, c 및 a 활동을 갖습니다. –

답변

0

예상 결과 우선, 모든 종류의 문제를 다루기를 원하지 않는 한 공백이나 하이픈을 포함하는 변수 이름을 사용하지 마십시오.

df <- read.table(text=' 
User.ID Date   Activity  Number.of.activity 
1  03.04.2014   a    3 
1  04.04.2014   c    2 
2  05.06.2014   a    3 
1  12.06.2014   b    2 
1  06.10.2014   b    1 
3  10.11.2014   a    3 
1  05.11.2014   c    2 
1  06.12.2014   a    1 
', header=T) 

두 번째로, 날짜로 작업하는 경우 적절한 데이터 형식을 사용하여 비교 작업이 중요합니다.

sapply(split(df, df$User.ID), function(x) 
    sum((x$Date > tail(sort(x$Date[x$Activity == 'b']), 1)) & 
     (x$Activity != 'b'))) 
#1 2 3 
#2 0 0