मेरे पास 10 स्तंभों के साथ एक डेटा फ़्रेम है, "उपयोगकर्ताओं" की क्रियाओं को एकत्रित करना, जहां स्तंभों में से एक में एक आईडी शामिल है (अद्वितीय नहीं, उपयोगकर्ता की पहचान करना) (स्तंभ 10)। डेटा फ़्रेम की लंबाई लगभग 750000 पंक्तियाँ हैं। मैं एक एकल अभिनेता के कार्यों को अलग करने के लिए "उपयोगकर्ता" पहचानकर्ता वाले कॉलम से अलग-अलग डेटा फ़्रेम (इसलिए एक सूची या डेटा फ़्रेम का वेक्टर) प्राप्त करने की कोशिश कर रहा हूं।
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
जिसके परिणामस्वरूप
list(
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
,
4 | aad | bb4 | ... | u_002
...)
निम्नलिखित एक छोटे से नमूने (1000 पंक्तियों) पर मेरे लिए बहुत अच्छा काम करता है:
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
और फिर मैं उदाहरण के लिए पथ [1] से उस तत्व तक पहुँचना चाहता हूँ।
मूल बड़े डेटा फ़्रेम या यहां तक कि मैट्रिक्स प्रतिनिधित्व पर आवेदन करते समय, यह मेरी मशीन (4 जीबी रैम, मैकओएसएक्स 10.6, आर 2.15) को चोक करता है और कभी पूरा नहीं होता है (मुझे पता है कि एक नया आर संस्करण मौजूद है, लेकिन मेरा मानना है कि यह मुख्य समस्या नहीं है )।
ऐसा लगता है कि विभाजन अधिक निष्पादित होता है और लंबे समय के बाद पूरा होता है, लेकिन मुझे नहीं पता (अवर आर ज्ञान) कैसे वैक्टर की परिणामी सूची को मैट्रिस के वेक्टर में विभाजित किया जाए।
path = split(smallsampleMat, smallsampleMat[,10])
मैंने भी big.matrix
आदि का उपयोग करने पर विचार किया है , लेकिन बहुत अधिक सफलता के बिना जो इस प्रक्रिया को गति देगा।
dlply(df, .(userid))
और पाया कि यहsplit
दौड़ के समय को शामिल किए बिना भी बुरा हैrequire(plyr)
, धन्यवाद और ओपी!