2011-11-21 84 views
7

在R中,我有一個數據框,其中包含由幾個值描述的觀察值,其中一個值是一個因子。我已經按此因子對數據集進行了排序,並希望添加一個列,在該列中我將在該因子的每個級別上獲得大量觀察結果,例如,按組觀察數

factor obsnum 
a  1 
a  2 
a  3 
b  1 
b  2 
b  3 
b  4 
c  1 
c  2 
... 

在SAS我喜歡的東西做到這一點:

data logs.full; 
    set logs.full; 
    count + 1; 
    by cookie; 
    if first.cookie then count = 1; 
run; 

我如何能實現在R裏面?

感謝,使用

回答

13

使用rle(行程長度編碼)和sequence

x <- c("a", "a", "a", "b", "b", "b", "b", "c", "c") 

data.frame(
    x=x, 
    obsnum = sequence(rle(x)$lengths) 
) 

    x obsnum 
1 a  1 
2 a  2 
3 a  3 
4 b  1 
5 b  2 
6 b  3 
7 b  4 
8 c  1 
9 c  2 
3

一個解決方案基礎R,假設你的數據在一個data.frame名爲dfr

dfr$cnt<-do.call(c, lapply(unique(dfr$factor), function(curf){ 
    seq(sum(dfr$factor==curf)) 
})) 

有可能更好的解決方案(例如採用包plyr及其ddply),但它應該管用。

5

這裏是ddply()溶液

dataset <- data.frame(x = c("a", "a", "a", "b", "b", "b", "b", "c", "c")) 
library(plyr) 
ddply(dataset, .(x), function(z){ 
    data.frame(obsnum = seq_along(z$x)) 
})