2017-01-31 33 views
1

Ich versuche, den Mittelwert aus einer Liste von Spalten in R und bin in ein Problem. Lassen Sie uns sagen, ich habe:Mittelwert mehrerer Spalten in R

A B C D 
1 2 3 4 
5 6 7 8 
9 10 11 12 

Was ich versuche, den Mittelwert der Spalten c (A, C) und als Wert speichern zu tun ist, nehmen sagen (E) sowie der Mittelwert der Spalten c (B , D) und habe es als einen anderen Wert speichern sagen F. Ist das möglich?

E F 
2 3 
6 7 
10 11 

Antwort

2

Check out dplyr zu bekommen:

library(dplyr) 
df <- df %>% mutate(E=(A+C)/2, F=(B+D)/2) 
df 

    A B C D E F 
1 1 2 3 4 2 3 
2 5 6 7 8 6 7 
3 9 10 11 12 10 11 
2

Wir können den Datensatz mit den Spalten der Teilmenge 1 & 2, ein weiteres mit 3 & 4, fügen sie zusammen, Teile durch 2, und ändern die Spaltennamen mit setNames

setNames((df1[1:2] + df1[3:4])/2, c("E", "F")) 
# E F 
#1 2 3 
#2 6 7 
#3 10 11 

Oder eine andere Option ist rowMeans, indem Sie es in einem list mit dem Recycling-Logikvektor, Schleife durch die list (mit sapply) und erhalten Sie die rowMeans

i1 <- c(TRUE, FALSE) 
sapply(list(df1[i1], df1[!i1]), rowMeans) 

Oder eine andere Option ist unlist der Datensatz, wandeln es in array und verwenden apply die mean

apply(array(unlist(df1), c(3, 2, 2)), c(1,2), mean) 
+0

Wenn ich eine Liste von Spalten, sagen a1, a2, a3, b1, b2, b3, c1, c2, c3 und wollte die mittlere Punktzahl o nehmen f Spalten a1, a2, a3 in eine Spalte und ebenso mit b und c, um einen Mittelwert von a, b, c in eine einzige Spalte für jeden Buchstaben zu haben, könnte ich das gleiche tun? –

+1

@DanteSmith In diesem Fall '' sapply (split.default (df1, sub ("\\ d +", "", Spaltennamen (df1))), rowMeans) ' – akrun

+0

Wo kommt \\ d + ins Spiel? Spaltet die Spalte nach der Nummer? –

Verwandte Themen