2010-02-15 7 views
8

मेरे पास 16 कॉलम डेटा फ्रेम द्वारा 114 पंक्ति है जहां पंक्तियां व्यक्ति हैं, और कॉलम या तो उनके नाम या NA हैं। उदाहरण के लिए, पहले 3 पंक्तियों इस तरह दिखता है:लागू होने वाले एनए मानों को संभालने और अद्वितीय

  name name.1  name.2 name.3  name.4 name.5  name.6 name.7  name.8 name.9  name.10 name.11  name.12 name.13  name.14 name.15 
1   <NA> <NA>  <NA> <NA>   <NA> <NA>   <NA> <NA>   <NA> <NA>  Aanestad <NA>  Aanestad <NA>  Aanestad <NA> 
2   <NA> <NA>  <NA> <NA>   <NA> <NA>   <NA> <NA>  Ackerman <NA>  Ackerman <NA>  Ackerman <NA>  Ackerman <NA> 
3   <NA> <NA>  <NA> <NA>   <NA> <NA>  Alarcon <NA>  Alarcon <NA>  Alarcon <NA>  Alarcon <NA>   <NA> <NA> 

मैं एक सूची उत्पन्न करना चाहते हैं या वेक्टर (प्रति पंक्ति कई अद्वितीय नामों अगर) (यदि केवल एक पंक्ति प्रति अनन्य नाम) सभी अद्वितीय नाम, के साथ की लंबाई 114.

जब मैं apply(x,1,unique) कोशिश करता हूं तो मुझे 2xNcol सरणी मिलती है जहां कभी-कभी पहली पंक्ति कक्ष NA होता है और कभी-कभी दूसरी पंक्ति कक्ष NA है।

[,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7] [,8] [,9]  
[1,] NA   NA   NA  NA  "Alquist" NA  "Ayala" NA  NA  
[2,] "Aanestad" "Ackerman" "Alarcon" "Alpert" NA  "Ashburn" NA  "Baca" "Battin" 

जब कि मैं क्या करना चाहते हैं बस है:)

Aanestad 
Ackerman 
Alarcon 
... 

मैं यह पता लगाने की कैसे अद्वितीय लागू नहीं कर पा रहे (एनए को अनदेखा करते हुए। na.rm, na.omit आदि काम नहीं कर रहे हैं। मुझे लगता है कि मुझे कुछ वास्तविक सरल याद आ रहा है ...

धन्यवाद!

उत्तर

18

unique एक na.rm तर्क है करने के लिए प्रकट नहीं होता है, लेकिन आप इसे कॉल करने से पहले लापता मूल्यों अपने आप को दूर कर सकते हैं:

A <- matrix(c(NA,"A","A", 
      "B", NA, NA, 
       NA, NA, "C"), nr=3, byrow=TRUE) 
apply(A, 1, function(x)unique(x[!is.na(x)])) 

देता

[1] "A" "B" "C" 
+0

आह ... इस काम करता है! धन्यवाद! – bshor

8

आप बहुत, बहुत अपने प्रारंभिक में करीब थे उपाय। लेकिन जैसा कि अनिको ने टिप्पणी की थी, आप अद्वितीय उपयोग करने से पहले NA मानों को हटाने के लिए नहीं हैं।

एक उदाहरण है जहाँ हम पहले एक ऐसी ही data.frame बनाने और उसके बाद apply() का उपयोग के रूप में आप था - लेकिन एक अतिरिक्त उस अज्ञात फ़ंक्शन na.omit() और unique() गठबंधन करने के लिए प्रयोग किया जाता है के साथ:

R> DF <- t(data.frame(foo=sample(c(NA, "Foo"), 5, TRUE), 
         bar=sample(c(NA, "Bar"), 5, TRUE))) 
R> DF 
    [,1] [,2] [,3] [,4] [,5] 
foo "Foo" NA "Foo" "Foo" "Foo" 
bar NA NA NA "Bar" "Bar" 
R> apply(DF, 1, function(x) unique(na.omit(x))) 
    foo bar 
"Foo" "Bar" 
+0

यह भी बहुत अच्छा काम करता है। धन्यवाद, Dirk (शिकागो आर उपयोगकर्ताओं जाओ!) – bshor

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