2015-03-27 2 views
5

मेरे पास डेटा.फ्रेम है जो लगभग पूरी तरह से रिक्त स्थान है, लेकिन प्रत्येक पंक्ति में एक मान है। मैं प्रत्येक पंक्ति की सामग्री को एक वेक्टर में मर्ज करने के लिए वेक्टरकृत या अन्य आर-स्थानीय भाषा का उपयोग कैसे कर सकता हूं?लागू या अन्य वेक्टरीकृत दृष्टिकोण का उपयोग कर कॉलम की सामग्री विलय करना

नमूना डेटा:

raw_data <- structure(
    list(
     col1 = c("", "", "", "", ""), 
     col2 = c("", "", "", "", ""), 
     col3 = c("", "", "", "", ""), 
     col4 = c("", "", "", "Millburn - Union", ""), 
     col5 = c("", "", "Cranston (aka Garden City Center)", "",""), 
     col6 = c("", "", "", "", ""), 
     col7 = c("", "", "", "", ""), 
     col8 = c("", "", "", "", "Colorado Blvd"), 
     col9 = c("", "", "", "", ""), 
     col10 = c("", "", "", "", ""), 
     col11 = c("Palo Alto", "Castro (aka Market St)", "", "", "") 
    ), 
    .Names = c("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10", "col11"), 
    row.names = c(5L, 4L, 3L, 2L, 1L), 
    class = "data.frame" 
) 

यह है कि मैं क्या करने की कोशिश की है लेकिन यह विफल रहता है, के रूप में यह एक 2-आयामी मैट्रिक्स वांछित वेक्टर के बजाय रिटर्न:

raw_data$test <- apply(raw_data, MAR=1, FUN=paste0) 

उत्तर

3

अपने अंतर्ज्ञान के बारे में apply सही है । तुम बस पास करनी होगी collapse तर्क paste रहे हैं:

apply(raw_data, 1, paste0, collapse = "") 
            5         4         3 
         "Palo Alto"   "Castro (aka Market St)" "Cranston (aka Garden City Center)" 
            2         1 
       "Millburn - Union"      "Colorado Blvd" 
5

तुम बहुत बस एक भी सूचकांक आपरेशन के साथ ऐसा कर सकते हैं:

raw_data[raw_data!=''] 

डेमो:

R> raw_data[raw_data!='']; 
[1] "Millburn - Union"     "Cranston (aka Garden City Center)" "Colorado Blvd"      "Palo Alto"       "Castro (aka Market St)" 

आप परवाह करते हैं वेक्टर ऑर्डर टॉप-टू-डाउन (बाएं से दाएं के विपरीत, ऊपर-से-नीचे, जो उपर्युक्त ऑपरेशन करता है) के विपरीत, आप इनपुट डेटा ट्रांसफर कर सकते हैं। फ्रेम:

R> t(raw_data)[t(raw_data)!='']; 
[1] "Palo Alto"       "Castro (aka Market St)"   "Cranston (aka Garden City Center)" "Millburn - Union"     "Colorado Blvd" 
1

इस उदाहरण में, प्रति पंक्ति केवल एक तत्व है जो '' नहीं है। इधर, एक और तरीका है के साथ do.call

do.call(paste, c(raw_data, sep='')) 
#[1] "Palo Alto"       "Castro (aka Market St)"   
#[3] "Cranston (aka Garden City Center)" "Millburn - Union"     
#[5] "Colorado Blvd"  

मान लीजिए paste उपयोग करने के लिए, अगर वहाँ 'raw_data' में प्रति पंक्ति एक से अधिक तत्वों कि '' नहीं हैं, उस स्थिति में हैं, यह sep=';' or उपयोग करने के लिए बेहतर हो सकता है, `है।

raw_data[1,1] <- 'Millburn' 
raw_data[1,3] <- 'Something' 
gsub('^;+|;+$|(;);+', '\\1', do.call(paste, c(raw_data, sep=';'))) 
#[1] "Millburn;Something;Palo Alto"  "Castro (aka Market St)"  
#[3] "Cranston (aka Garden City Center)" "Millburn - Union"   
#[5] "Colorado Blvd"      

apply

unname(apply(raw_data, 1, FUN=function(x) paste(x[x!=''],collapse=';'))) 
#[1] "Millburn;Something;Palo Alto"  "Castro (aka Market St)"  
#[3] "Cranston (aka Garden City Center)" "Millburn - Union"   
#[5] "Colorado Blvd"      
ऊपर के रूप में एक ही परिणाम हो जाता है
संबंधित मुद्दे