आर

2012-04-04 13 views
6

में रैंडम पंक्ति चयन मैं इस dataframeआर

id <- c(1,1,1,2,2,3) 
name <- c("A","A","A","B","B","C") 
value <- c(7:12) 
df<- data.frame(id=id, name=name, value=value) 
df 

इस समारोह से एक यादृच्छिक पंक्ति का चयन करता है:

randomRows = function(df,n){ 
    return(df[sample(nrow(df),n),]) 
} 

यानी

randomRows(df,1) 

लेकिन मैं बेतरतीब ढंग से किसी एक का चयन करना चाहते हैं पंक्ति प्रति 'नाम' (या प्रति 'आईडी' जो वही है) और पूरी पंक्ति को एक नई तालिका में संयोजित करें, इसलिए इस मामले में, तीन पंक्तियां। इसे 2000+ पंक्तियों डेटाफ्रेम के माध्यम से लूप करना है। कृपया मुझे दिखाओ कैसे ?!

उत्तर

2

मुझे लगता है कि आप plyr पैकेज के साथ ऐसा कर सकते हैं:

library("plyr") 
ddply(df,.(name),randomRows,1) 

जो आप उदाहरण के लिए देता है:

id name value 
1 1 A  8 
2 2 B 11 
3 3 C 12 

यह आपके लिए क्या देख रहे है?

+0

मेरे अच्छे आदमी है कि ठीक है कि मैं क्या तलाश कर रहा हूँ है कि यह ऐसा करने का एक ही रास्ता है! बहुत साफ समारोह। धन्यवाद! – Bernard

+0

आपका स्वागत है। क्या आप जवाब स्वीकार कर सकते हैं ताकि अन्य जान सकें कि प्रश्न का उत्तर दिया गया है? –

2

यहाँ आधार आर में

> df.split <- split(df, df$name) 
> df.sample <- lapply(df.split, randomRows, 1) 
> df.final <- do.call("rbind", df.sample) 
> df.final 
    id name value 
A 1 A  7 
B 2 B 11 
C 3 C 12