2014-04-11 2 views
1

새 ID가 시작될 때마다 1부터 시작하여 정렬 된 데이터 프레임의 행을 연속적으로 번호를 매기려면 어떻게해야합니까?R : 행의 연속 번호 지정

내가 무엇을 가지고 :

id | value 
a | 2 
a | 6 
a | 1 
a | 10 
a | 12 
b | 5 
b | 2 
b | 3 
... 

내가 원하는 무엇 :

id | value | t 
a | 2 | 1 
a | 6 | 2 
a | 1 | 3 
a | 10 | 4 
a | 12 | 5 
b | 5 | 1 
b | 2 | 2 
b | 3 | 3 
... 
+0

[r의 데이터 프레임의 열에 특정 끝이없는 입력 순차 번호] 가능한 중복 (http://stackoverflow.com/questions/23007982/input-sequential-numbers-without-specificend-in-a- data-frames-column-in-r) – A5C1D2H2I1M1N2O1R2T1

답변

3
DF <- read.table(text="id | value 
a | 2 
a | 6 
a | 1 
a | 10 
a | 12 
b | 5 
b | 2 
b | 3", sep="|", header=TRUE) 

DF$t <- sequence(rle(as.character(DF$id))$lengths) 
# id value t 
# 1 a  2 1 
# 2 a  6 2 
# 3 a  1 3 
# 4 a  10 4 
# 5 a  12 5 
# 6 b  5 1 
# 7 b  2 2 
# 8 b  3 3 
+0

완벽한, 그게 내가 찾고있는 것입니다. 고맙습니다! – moabit21

+0

'data.table','dplyr','tapply' 및'ave' 대안 [** here **] (http://stackoverflow.com/questions/22288462/replace-loop-with-an-pply-alternative)/22288615 # 22288615). – Henrik

+0

@Henrik'sequence'와'rle'은 매우 효율적이어야합니다. 따라서 이러한 대안 중 하나를 언제 사용해야하는지 확신 할 수 없습니다. – Roland

0

당신이 사용할 수 있습니다 -이 빠르게 ddply 또는 분할을 발견

gr_index <- as.numeric(table(df$id)) 
df$gr_index <- unlist(lapply(gr_index, seq_len)) 

을 명령, 특히 대형 데이터 세트에서.