2017-06-14 5 views
7

में सूचकांक में मूल्य पर आधारित स्तंभ मर्ज मैं इस तरह एक मैट्रिक्स है:एक अलग वेक्टर

> y 
    [,1] [,2] [,3] [,4] 
[1,] 17 14 5 8 
[2,] 7 2 17 2 
[3,] 10 18 6 6 
[4,] 6 11 4 11 
[5,] 5 9 4 9 

और एक वेक्टर

> group 
[1] 1 2 2 3 

समूह वेक्टर इंगित करता है कि स्तंभ 1 समूह 1 में है, कॉलम 2 और 3 समूह 2 में हैं और कॉलम 3 समूह 3 में हैं। मैं y (कॉलम के अनुसार) में कॉलम जोड़ना चाहता हूं ताकि किसी विशेष समूह को आवंटित सभी कॉलम एक साथ जोड़े जाए, ताकि मुझे मिल जाए:

 [,1] [,2] [,3] 
[1,] 17 19 8 
[2,] 7 19 2 
[3,] 10 24 6 
[4,] 6 15 11 
[5,] 5 13 9 

मैं सबसेट, मर्ज और कम करने के साथ गड़बड़ कर रहा हूं लेकिन मुझे वास्तव में कहीं भी नहीं मिल रहा है।

उत्तर

5

हम

sapply(split(seq_along(group), group), function(x) rowSums(y[, x, drop = FALSE])) 
#  1 2 3 
#[1,] 17 19 8 
#[2,] 7 19 2 
#[3,] 10 24 6 
#[4,] 6 15 11 
#[5,] 5 13 9 

कर सकते हैं या फिर एक और विकल्प यहाँ rowsum

t(rowsum(t(y), group)) 
#  1 2 3 
#[1,] 17 19 8 
#[2,] 7 19 2 
#[3,] 10 24 6 
#[4,] 6 15 11 
#[5,] 5 13 9 
+1

बिल्कुल वही जो मुझे चाहिए, और आधार आर समाधान के लिए +1 जो मेरे लिए उपयोगी था। – smiley

1

है एक dplyr तरीका है:

data.frame(group = group, t(y)) %>% 
    group_by(group) %>% 
    summarise_each(funs(sum), -group) %>% 
    ungroup() %>% 
    select(-group) %>% 
    as.matrix() %>% 
    t() 

नीचे टूटी, हम स्थानांतरित y और इसे एक अलग कॉलम के रूप में group के साथ डेटा.फ्रेम बनाएं। फिर हम समूह पर प्रत्येक कॉलम के group_by & योग को लेने के लिए स्वतंत्र हैं। अंतिम चार चरण परिणाम को वापस वांछित प्रारूप में बदलने के बारे में हैं।

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