2016-06-11 10 views
-3

Ich möchte colMeans() auf meine "Daten" -Matrix anwenden, aber in Teilmengen.Wie wendet man colMeans nur auf bestimmte Zeilen in R an?

Zum Beispiel, hier ist diese (Daten):

 C1 C2 C3 C4 C5 Category 
Gene1 0.07 0.11 0.05 0.07 0.07 A 
Gene2 0.20 0.18 0.16 0.15 0.15 A 
Gene3 0.91 0.93 0.90 0.17 0.92 C 
Gene4 0.32 0.05 0.12 0.13 0.05 B 
Gene5 0.44 0.53 0.46 0.03 0.47 A 
Gene6 0.70 0.34 0.80 0.80 0.80 B 
Gene7 0.49 0.55 0.67 0.49 0.89 B 
Gene8 0.25 0.20 0.49 0.21 0.50 C 
Gene9 0.10 0.10 0.05 0.11 0.09 C 

Ich möchte colMeans (Daten) für jede Kategorie der Gene anzuwenden, so dass für Teilmenge "A", "B" und "C" getrennt, und haben die colMeans Ergebnisse wie folgt:

C1 C2 C3 C4 C5 Category 
0.24 0.27 0.22 0.08 0.23 A 
0.50 0.31 0.53 0.47 0.58 B 
0.42 0.41 0.48 0.16 0.50 C 

Jede Hilfe geschätzt. Danke im Voraus!

+1

Sie können 'by' oder' aggregate' verwenden. Mach dein Beispiel reproduzierbar und wir können reden. Sie können 'dput' verwenden, um Daten zu teilen. –

+0

Verwenden Sie 'library (dplyr); df1%>% group_by (Kategorie)%>% summarise_each (Spaß (Mittelwert))' – akrun

Antwort

1

Eine andere Alternative:

sapply(dat[, 1:5], function(x) tapply(x, dat[, 6], mean)) 

     C1  C2  C3   C4  C5 
A 0.2366667 0.2733333 0.2233333 0.08333333 0.2300000 
B 0.5033333 0.3133333 0.5300000 0.47333333 0.5800000 
C 0.4200000 0.4100000 0.4800000 0.16333333 0.5033333 
+0

Danke für Ihre Antwort hier. Das funktioniert für mich! – Letin

2

Wenn es aa data.frame eine Option ist summarise_each von dplyr

library(dplyr) 
df1 %>% 
    group_by(Category) %>% 
    summarise_each(funs(round(mean(.),2))) 

Wenn jedoch der Datensatz matrix ist, wandeln dann data.frame mit stringsAsFactors=FALSE, führen Sie die Typumwandlung in numerische vor der mean

bekommen
as.data.frame(mat1, stringsAsFactors=FALSE) %>% 
       group_by(Category) %>% 
       summarise_each(funs(round(mean(as.numeric(.)), 2))) 
+1

Vielen Dank für Ihre Antwort hier. – Letin

+0

@PoojaMandaviya Danke, sieht aus, als ob du ein Fan von Base R bist. Keine Probleme. – akrun

+0

Ja, das war nur eine Zeile und die erste, die ich ausprobiert habe. Aber natürlich funktionieren beide Methoden gleich :) – Letin