2013-03-20 16 views
32

में वैक्टरों की एक सूची को गठबंधन करें मेरे पास संख्यात्मक वेक्टर की एक सूची है और मैं उन्हें एक वेक्टर में जोड़ना चाहता हूं। लेकिन मैं ऐसा करने में असमर्थ हूं। इस सूची में सूची तत्व में एक तत्व आम हो सकता है। अंतिम वेक्टर उन्हें दो बार नहीं जोड़ना चाहिए।आर + एक वेक्टर

>lst 
`1` 
[1] 1 2 
`2` 
[2] 2 4 5 
`3` 
[3] 5 9 1 

मैं अंतिम परिणाम चाहते हैं के रूप में इस

>result 
[1] 1 2 4 5 9 1 

मैं निम्नलिखित बातें कर रही करने की कोशिश की repition के बारे में चिंता किए बिना,: यहाँ एक उदाहरण है

>vec<-vector() 
>sapply(lst, append,vec) 

और

>vec<-vector() 
>sapply(lst, c, vec) 

उनमें से कोई भी बदतर नहीं ked। क्या इस बारे में कोई मेरी मदद कर सकता है?

धन्यवाद।

+0

धन्यवाद @ जोशो'ब्रायन। लेकिन यह डुप्लिकेट मानों को नहीं हटाता है। –

+0

@ जोरान मुझे संदेह है कि 'अद्वितीय' पर्याप्त दंडित होगा; 'अद्वितीय '* आसन्न * सूची घटकों के बीच 1 सामान्य तत्व से काफी आसानी से हटा सकता है। नोट 'अद्वितीय (असूची (एलएसटी))' ओपी चाहता है जो नहीं देगा। –

+3

क्या आप बस इतना कह रहे हैं कि आप एक-दूसरे के बगल में कोई भी दोहराए गए मूल्य नहीं चाहते हैं? या आप कह रहे हैं कि यदि आप एक वेक्टर के अंत में अगले की शुरुआत से मेल खाते हैं तो आप तत्व को दोहराना नहीं चाहते हैं? अधिक उदाहरण प्रदान करने से मदद मिल सकती है ... – Dason

उत्तर

36

एक समाधान ऊपर प्रस्तावित एक की तुलना में तेजी है:

vec<-unlist(lst) 
vec[which(c(1,diff(vec)) != 0)] 

यह ऊपर प्रस्तावित एक की तुलना में तेजी है।

+4

'vec क्या है [जो (सी (1, diff (vec))! = 0)] 'के लिए? – Galaxy

+4

लेकिन क्या यह ऊपर प्रस्तावित एक से तेज है? – hedgedandlevered

6

आप चाहते RLE:

rle(unlist(lst))$values 

> lst <- list(`1`=1:2, `2`=c(2,4,5), `3`=c(5,9,1)) 
> rle(unlist(lst))$values 
## 11 21 22 31 32 33 
## 1 2 4 5 9 1 
+0

मैं भी यह सोच रहा था। मेरे पास एक समस्या यह है कि मुझे नहीं पता कि वे सूची तत्व के भीतर दोहराए गए मानों को हटाना चाहते हैं ... – Dason

+2

यह वह है जो मैं करने की कोशिश कर रहा हूं।मैं इसे निम्न विकल्प के साथ भी कर सकता हूं: 'vec <-unlist (lst); vec [जो (सी (1, diff (vec))! = 0)] ' अब मैं सोच रहा हूं कि कौन सा बेहतर है? –

+0

यह शायद तेज़ है क्योंकि यह कम काम कर रहा है (और मेरी मशीन पर आपके छोटे उदाहरण पर तेज़ है)। 'Rle' के लिए कोड देखें। आप इसे एक और जवाब के रूप में जोड़ सकते हैं। –

4

ढेर इस अच्छी तरह से भी कर जाएगा, और अधिक संक्षिप्त दिखता है:

stack(lst)$values 
9

एक और जवाब Reduce() का उपयोग कर।

वैक्टर की सूची बनाएं:

lst <- list(c(1,2),c(2,4,5),c(5,9,1)) 

उन्हें एक वेक्टर

vec <- Reduce(c,lst) 
vec 
# [1] 1 2 2 4 5 5 9 1 

में कम्बाइन दोहराया वाले केवल एक बार रखें:

unique(Reduce(c,lst)) 
#[1] 1 2 4 5 9 

आपको लगता है कि बार-बार रखना चाहते हैं अंत में, आप vec[which(c(1,diff(vec)) != 0)] का उपयोग करना चाहेंगे जैसे @ रचिद के उत्तर

+0

असल में 'अनलिस्ट (एलएसटी) 'घटाएं (सी, एलएसटी)' से आसान है। –

संबंधित मुद्दे