2017-09-09 4 views
-1

은 다음과 같이 데이터 프레임을 감안할 때 :그룹화 데이터

station <- c(1, 2, 3, 1, 2, 3, 1, 2, 2, 2) 
obs <- c(12.3, 10.4, 9.8, 15.9, 8.2, 8.4, 6.3, 10.2, 9.0, 8.3) 
df <- data.frame(station, obs) 

내가 지금처럼 새 열 run를 만들 싶습니다

station obs run 
1  1 12.3 1 
2  2 10.4 1 
3  3 9.8 1 
4  1 15.9 2 
5  2 8.2 2 
6  3 8.4 2 
7  1 6.3 3 
8  2 10.2 3 
9  2 9.0 4 
10  2 8.3 5 

내가이 작성했다면 다른 언어를 사용하면 의사 코드는 다음과 같이 보입니다.

run := 1 
if station(previous) >= station(current): 
    run := run + 1 

어떻게해야할까요? h tidyr 님과 친구가 있습니까?

+0

은 어디에서''temp''을 받고? 'obs '라는 뜻입니까? 또한, "의사 코드"가 아닌 필요한 것을 단어로 설명하십시오 ... –

+0

@RichScriven 예, 저는 'dplyr'을 의미했습니다. 자르고 붙여 넣기가 실패 할 때까지, 누군가 내가 그것을 고칠 수 있기 전에 그것을 고쳤다 - 고마워! –

답변

6
library(dplyr) 

df %>% 
    mutate(run = cumsum(c(TRUE, diff(station)<=0))) 
station obs run 
1  1 12.3 1 
2  2 10.4 1 
3  3 9.8 1 
4  1 15.9 2 
5  2 8.2 2 
6  3 8.4 2 
7  1 6.3 3 
8  2 10.2 3 
9  2 9.0 4 
10  2 8.3 5