2012-07-27 18 views
7

में पंक्तियों की जोड़ी मेरे पास निम्न जैसा कॉलम है। प्रत्येक कॉलम में दो जोड़े होते हैं जिनमें प्रत्यय "ए" और "बी" होता है - उदाहरण के लिए col1a, col1b, colNa, colNb और फ़ाइल के अंत तक (> 50000)।विलय (विभाजन के विपरीत) आर

mydataf <- data.frame (Ind = 1:5, col1a = sample (c(1:3), 5, replace = T), 
    col1b = sample (c(1:3), 5, replace = T), colNa = sample (c(1:3), 5, replace = T), 
    colNb = sample (c(1:3),5, replace = T), 
    K_a = sample (c("A", "B"),5, replace = T), 
    K_b = sample (c("A", "B"),5, replace = T)) 

mydataf 
    Ind col1a col1b colNa colNb K_a K_b 
1 1  1  1  2  3 B A 
2 2  1  3  2  2 B B 
3 3  2  1  1  1 B B 
4 4  3  1  1  3 A B 
5 5  1  1  3  2 B A 

प्रथम स्तंभ (इंडस्ट्रीज़) को छोड़कर, मैं प्रत्यय "एक" और "b" निकाले जाने के निम्नलिखित की तरह dataframe देखो बनाने के लिए पंक्तियों की जोड़ी संक्षिप्त करने के लिए, सेम टाइम पर चाहते हैं। इसके अलावा विलय कर दिया वर्ण या संख्या पहले कि 2, बी से एक पहले 1 आदेश दिया जा

Ind col1 colN K_ 
    1 11  23 AB 
    2 13  22 BB 
    3 12  11 BB 
    4 13  13 AB 
    5 11  23 AB 

संपादित करें: ग्रेप समारोह (शायद) जवाब में समस्या है, तो कॉलम के नाम समान हैं।

mydataf <- data.frame (col_1_a = sample (c(1:3), 5, replace = T), 
    col_1_b = sample (c(1:3), 5, replace = T), col_1_Na = sample (c(1:3), 5, replace = T), 
    col_1_Nb = sample (c(1:3),5, replace = T), 
    K_a = sample (c("A", "B"),5, replace = T), 
    K_b = sample (c("A", "B"),5, replace = T)) 
n <- names(mydataf) 
nm <- c(unique(substr(n, 1, nchar(n)-1))) 
df <- data.frame(sapply(nm, function(x){ 
          idx <- grep(x, n) 
          cols <- mydataf[idx] 
          x <- apply(cols, 1, 
             function(z) paste(sort(z), collapse = "")) 
          return(x) 
          })) 
names(df) <- nm 
df 

col_1_ col_1_N K_ 
1 2233  23 BB 
2 2233  22 BB 
3 1123  13 AB 
4 1223  12 AB 
5 2333  33 AB 

उत्तर

5
mydataf 
    Ind col1a col1b colNa colNb K_a K_b 
1 1  2  1  1  1 A A 
2 2  1  2  1  3 B A 
3 3  1  2  3  2 A A 
4 4  1  2  3  1 A B 
5 5  1  2  2  1 A A 
n <- names(mydataf) 
nm <- c("Ind", unique(substr(n, 1, nchar(n)-1)[-1])) 
df <- data.frame(sapply(nm, function(x){ 
          idx <- grep(paste0(x, "[ab]?$"), n) 
          cols <- mydataf[idx] 
          x <- apply(cols, 1, 
             function(z) paste(sort(z), collapse = "")) 
          return(x) 
          })) 
names(df) <- nm 
df 
    Ind col1 colN K_ 
1 1 12 11 AA 
2 2 12 13 AB 
3 3 12 23 AA 
4 4 12 13 AB 
5 5 12 12 AA 
+0

समाधान के लिए धन्यवाद, फिर भी समारोह, फिर भी लग रहा है वहाँ की तरह समस्या यदि चर के नाम कर रहे हैं समान हाल संपादन देखें .. – shNIL

+0

@sharnil, मैं 'x'' paste0 के साथ बदल दिया (एक्स, "[एबी]? $") 'grep' में। अब इसे स्तंभ नाम को ए या बी के साथ समाप्त करने की आवश्यकता होगी, या उनमें से कोई भी नहीं ('इंडी केस के लिए)। यदि कोई 'इंड' कॉलम नहीं है तो आप '?' हटा सकते हैं। – Julius