2013-10-02 1 views
0

정말 R에 새로운 것이므로 정말 감각이 없으면 미안합니다.컬럼 값에 기초한 반복 된 시퀀싱

나는 STAND라고 불리는 여러 다른 영역에서 수집 된 데이터가있는 DF를 가지고 있습니다. 1 : 3에서 실행되는 데이터를위한 시퀀스를 생성해야하지만, 새로운 STAND 번호에 관해서는 시퀀스를 다시 시작해야합니다.

STAND TREE_SPECIES DIAMETER  SEQ 
1 101737 Pine    276   1 
2 101737 Spruce   98   2 
3 101737 Spruce  104   3 
4 101737 Leaf   53   1 
5 155897 Spruce  82   1 
6 155897 Spruce  61   2 
7 155897 Leaf   97   3 
8 155897 Spruce  89   1 
9 155897 Spruce  75   2 
10 202568 Spruce  46   1 
11 202568 Spruce  56   2 
12 202568 Pine   204   3 
13 202568 Spruce  132   1 
14 202568 Spruce  93   2 

그것이 내가 내 DF에서 7416 행의 총 90 개 스탠드에 나누어 가지고 어떤 도움 경우 : 여기

내가 그것을 같이 할 몇 가지 더미 데이터

STAND TREE_SPECIES DIAMETER 
1 101737 Pine    276 
2 101737 Spruce   98 
3 101737 Spruce  104 
4 101737 Leaf   53 
5 155897 Spruce  82 
6 155897 Spruce  61 
7 155897 Leaf   97 
8 155897 Spruce  89 
9 155897 Spruce  75 
10 202568 Spruce  46 
11 202568 Spruce  56 
12 202568 Pine   204 
13 202568 Spruce  132 
14 202568 Spruce  93 

입니다 .

은 지금까지 나는 시도했다 :

myDF$SEQ <- seq(1:3) 

그러나 만 목록 1 : 3 전체 DF 이상.

정말 도움이됩니다.

+1

안녕과 유래에 오신 것을 환영합니다 당신은 새로운으로 그래서, [Stackoverflow에 대해] (http://stackoverflow.com/about)와 [how to ask] (http://meta.stackoverflow.com/help/how-to-ask)를 읽어보십시오. [최소한의 재현 가능한 데이터 세트]를 제공하면 답변을받을 가능성이 훨씬 더 높아집니다 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). # 5963610) 및 시도한 솔루션, 왜 작동하지 않는지, 예상되는 결과를 보여주십시오. 감사! – Henrik

답변

1

이 시도 :

df$SEQ <- ave(x = df$STAND, df$STAND, FUN = function(y) rep(1:3, length.out = length(y))) 

또는 짧은,하지만이 같은 결과로, 당신으로 인해 1의 재활용에 경고 메시지와 함께 살 수있는 경우 : 각 STAND의 길이에 따라 3 시퀀스 - 길이 없습니다 (1)의 길이가 반드시 배수 : 3 :

df$SEQ2 <- ave(df$STAND, df$STAND, FUN = function(y) 1:3) 

그 결과

df 
#  STAND TREE_SPECIES DIAMETER SEQ SEQ2 
# 1 101737   Pine  276 1 1 
# 2 101737  Spruce  98 2 2 
# 3 101737  Spruce  104 3 3 
# 4 101737   Leaf  53 1 1 
# 5 155897  Spruce  82 1 1 
# 6 155897  Spruce  61 2 2 
# 7 155897   Leaf  97 3 3 
# 8 155897  Spruce  89 1 1 
# 9 155897  Spruce  75 2 2 
# 10 202568  Spruce  46 1 1 
# 11 202568  Spruce  56 2 2 
# 12 202568   Pine  204 3 3 
# 13 202568  Spruce  132 1 1 
# 14 202568  Spruce  93 2 2 

avex 벡터 (여기서는 STAND)를 다음 (이름이없는) 인수 (여기서는 STAND)의 레벨로 정의 된 조각으로 나눕니다. ave의 각 부분에 적용되는 기본 기능 FUNmean입니다. 여기서는이 함수를 rep(1:3, length.out = length(y))으로 정의한 '익명 함수'function(y)으로 변경합니다. 'y'는 각 조각에 해당합니다. 'y'를 임의의 이름으로 바꿀 수 있습니다 (예 : function(chunk) rep(1:3, length.out = length(chunk))). 사람들은 function(x)을 자주 사용하지만 'x'도 사용되기 때문에 'x'를 여기에 사용하지 않으려합니다. 전체 벡터 ave의 인수로 각 조각의 경우, rep licate 값 1 :. 각 조각의 길이 즉, 원하는 길이 (length.out), 3 :! length(y)

관련 문제