2012-10-31 63 views
0

可能重複:
function with multiple outputs
numbering rows within groups in a data frame從R中的循環返回多個結果?

天兒真好,我有一個由地方分組的人員的名單。我想產生一個新的變量,給每個人一個數字,依賴於他們的位置。我想我的數據看起來就像是:

place  individual 
here  1 
here  2 
here  3 
there  1 
there  2 
somewhere 1 
somewhere 2 

我寫了這個:

nest<-data.frame(location=c("one","one","two", "three", "three", "three")) 
    individual<- function(x) 
     { 
     pp = 1 
     jj = 1 
     for (i in 2:length(x)){ 
      if (x[i] == x[pp]){ 
       res<- jj+1 
       pp = pp + 1 
       jj = jj + 1 
      } 
      else{ 
       res<- 1 
       pp = pp + 1 
       jj = 1 
      } 
     } 
     return(res) 
     } 

    test<- individual(nest$location) 
    test 

我敢肯定這不會是我想要的東西,但是,我想不出如何返回多個結果值。如何更改此函數以返回每個位置值的結果?或者,有沒有更簡單的方法來使用預先存在的R軟件包來做到這一點?

P.S.在附註中,我從nest $ individual [2]開始函數,因爲當它從1開始函數並嘗試查找以前的值(不存在)時,它會返回一個錯誤。如果有人想到如何解決這個問題,我很樂意聽到它。乾杯。

回答

0

也許是這樣的......?

ddply(nest,.(location),transform,individual = seq_len(length(location))) 
    location individual 
1  one   1 
2  one   2 
3 three   1 
4 three   2 
5 three   3 
6  two   1 

ddplyplyr包)

我敢肯定有與rle這樣做,以及華而不實的方式。事實上,只是爲了好玩:

do.call(c,lapply(rle(nest$location)[[1]],seq_len)) 
+0

參見http://stackoverflow.com/questions/12925063/numbering-rows-within-groups-in-a-data-frame/12925090#12925090 – mnel

+0

@mnel謝謝,我知道有一個更好的重複出現在那裏,我似乎無法找到它... – joran

+0

這裏的問題標題並不真正反映這個問題。 – mnel