2011-11-21 21 views
7

द्वारा निरीक्षण संख्या में मेरे पास कई मानों द्वारा वर्णित अवलोकनों के साथ एक डेटा फ्रेम है जिसमें से एक कारक है। मैंने इस कारक द्वारा डेटासेट को सॉर्ट किया है और एक कॉलम जोड़ना चाहता हूं जिसमें मुझे कारक के प्रत्येक स्तर पर कई अवलोकन मिलेगा।समूह

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

एसएएस में मैं की तरह कुछ के साथ कार्य करें:

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

मैं कैसे प्राप्त कर सकते है कि आर में?

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

रहे हैं की संभावना बेहतर समाधान (जैसे पैकेज plyr और उसके ddply प्रयोग करते हैं), लेकिन यह:

धन्यवाद,

उत्तर

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

एक समाधान आधार आर का उपयोग कर, अपने डेटा संभालने में एक data.frame नामित dfr है कार्य करना चाहिए।

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)) 
})