2016-10-25 15 views
5

ben şöyle bir tablo var:R: Satırı Hesaplama sütun adı kısmi maç dayalı demek

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 

Ben bir sonuç vermek, kısmen eşleşen adlara sahip satır sütunları arasında ortalama hesaplamak istiyorum böyle:

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 
Bu soru üzerinde bazı yararlı ipuçları buldunuz

:

Calculate row means based on (partial) matching column names

fakat benim için çalışmıyor gibi görünüyor. İşte kullanılan komutlar:

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))]) ) 

Bu son komut bana aşağıdaki hatayı veriyor:

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")) 

herhangi bir fikir neden: Burada

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

benim veri çerçevesinin dput olduğunu Bu hatayı alıyorum ve bunu nasıl düzeltebilirim?

Teşekkür ederiz!

cevap

5

Biz split can ve 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

teşekkürler olsun, bu çalışıyor gibi görünüyor! Sadece bunun ne olduğunu anlamak isterim. Farklı sütun adı formatlarıyla çalışır. as_1, er_22, vb? – arielle

+0

@arielle Adların biçimi "as_1", "er_22" ise, "alt" ("_. *", "", Adlar (df1)) ' – akrun

+1

iyi geliyor, teşekkürler! – arielle