2016-10-25 7 views
5

मैं एक मेज है कि इस तरह दिखता है:आर: पंक्ति गिना जा रहा है स्तंभ नाम आंशिक मैच के आधार पर मतलब

er er.1 as as.1 as.2 rt op 
a 1 6 90 8 6 4 87 
b 1 8 56 7 5 5 9 
c 8 7 6 4 5 9 6 
d 1 0 8 6 4 3 6 
e 9 7 2 4 3 89 7 

मैं गणना करने के लिए आंशिक रूप से मिलान नाम के साथ पंक्ति स्तंभों के बीच मतलब है, एक परिणाम देने के लिए चाहते हैं इस तरह:

er as   rt  op 
a 3.5 34.66666667 4  87 
b 4.5 22.66666667 5  9 
c 7.5 5   9  6 
d 0.5 6   3  6 
e 8 3   89  7 

मैं इस सवाल पर कुछ उपयोगी टिप्स मिला:

Calculate row means based on (partial) matching column names

लेकिन यह मेरे लिए काम नहीं कर रहा प्रतीत होता है। यहाँ आदेशों कि मैं प्रयोग किया जाता हैं:

test <- read.table("test.txt", header=TRUE, row.names=1) 

colnames <- c("er", "er", "as", "as", "as", "rt", "op") 

means <-sapply(colnames, function(x) rowMeans(test [, grep(x, names(test))]) ) 

यह पिछले आदेश मुझे निम्नलिखित त्रुटि देता है:

structure(list(er = c(1L, 1L, 8L, 1L, 9L), er.1 = c(6L, 8L, 7L, 
0L, 7L), as = c(90L, 56L, 6L, 8L, 2L), as.1 = c(8L, 7L, 4L, 6L, 
4L), as.2 = c(6L, 5L, 5L, 4L, 3L), rt = c(4L, 5L, 9L, 3L, 89L 
), op = c(87L, 9L, 6L, 6L, 7L)), .Names = c("er", "er.1", "as", 
"as.1", "as.2", "rt", "op"), class = "data.frame", row.names = c("a", 
"b", "c", "d", "e")) 

किसी भी विचार क्यों:

Error in rowMeans(test[, grep(x, names(test))]) : 
    'x' must be an array of at least two dimensions 

यहाँ मेरी डेटा फ्रेम के dput है मुझे यह त्रुटि मिल रही है और मैं इसे कैसे ठीक कर सकता हूं?

धन्यवाद!

उत्तर

5

हम split कर सकते हैं और rowMeans

sapply(split.default(df1, sub("\\..*", "", names(df1))), rowMeans) 
#  as er op rt 
#a 34.66667 3.5 87 4 
#b 22.66667 4.5 9 5 
#c 5.00000 7.5 6 9 
#d 6.00000 0.5 6 3 
#e 3.00000 8.0 7 89 
+0

धन्यवाद मिलता है, यह काम कर रहा है! मैं बस यह समझना चाहूंगा कि यह क्या करता है। क्या यह कॉलम नामों के विभिन्न प्रारूपों के साथ काम करेगा। as_1, er_22, आदि? – arielle

+0

@arielle यदि नामों का प्रारूप 'as_1',' er_22' है, तो 'sub (" _। * "," ", नाम (df1))' – akrun

+1

अच्छा लगता है, धन्यवाद! – arielle

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