2015-12-09 15 views
5

Wie bekomme ich den Durchschnitt von zwei Spalten einer Datentabelle mit dplyr? wenn meine Daten zum Beispiel, wenn wie unten:Wie erhalten Sie den Durchschnitt von zwei Spalten mit dplyr?

dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 

Ich möchte eine neue Spalte „Avg“ schaffen, die die Mittel der Spalte A und B für jede Zeile:

dt %>% mutate(Avg=mean(c(A, B), na.rm=T)) 

Aber dieser Code gibt mir nicht das richtige Ergebnis. Wie macht man das? Vielen Dank.

+1

Sie verwenden könnten Sie wirklich brauche 'dplyr'? –

+0

Die Durchschnittsberechnung ist ein Schritt aller meiner Berechnungen, ich brauche dplyr für die anderen Berechnungen. – Carter

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

Antwort

11

Wenn Sie wollen, dies zu erreichen, verwenden dplyr, würde ich vorschlagen, die Funktion mit rowwise():

R> library(dplyr) 
    R> dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 
    R> j <- dt %>% rowwise() %>% mutate(Avg=mean(c(A, B), na.rm=T)) 
    R> j 
Source: local data frame [5 x 3] 
Groups: <by row> 

     A  B Avg 
    (int) (dbl) (dbl) 
1  1  1 1.0 
2  2  4 3.0 
3  3 NA 3.0 
4  4  6 5.0 
5  5  8 6.5 
6

Wie wäre es

dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T)) 

mean nicht vektorisiert wird. Es reduziert alle Eingaben auf einen einzelnen Wert. Wenn Sie eine Matrix mit cbind() erstellen, können Sie rowMeans verwenden, um den Trick zu tun.

+0

das war die einzige funktionierende Lösung für mich, vielen Dank. –

1

als Anfangs-Datensatz data.table ist, wir data.table Methoden

dt[, Avg:= mean(unlist(.SD), na.rm=TRUE) , .1:nrow(dt)] 
dt 
# A B Avg 
#1: 1 1 1.0 
#2: 2 4 3.0 
#3: 3 NA 3.0 
#4: 4 6 5.0 
#5: 5 8 6.5 
Verwandte Themen