2016-07-31 7 views
-5

Zum Beispiel, wenn die Accessor .. war, das funktionieren würde:Wie greift man in dplyr :: fans auf die pipe-Datei data.frame zu?

iris %>% 
    select_if(is.numeric) %>% 
    # `..` here refers to the object generated thus far. 
    # `.` refers to the column being acted on. 
    mutate_all(funs(./sum(..))) 
+0

ich Ihnen die verrohrt ein Zugriff nicht glauben verwenden, wenn Sie 'direkt iris' aufrufen können. – alistaire

+0

@kennyB Bitte klären Sie, wonach Sie fragen. – steveb

+0

Sie möchten also jedes Element in einer Spalte durch die Summe der Spalte oder jedes Element in einer Spalte durch die Summe aller Spalten teilen? – steveb

Antwort

0

Wenn Sie Spalte nehmen wollen summiert Sie können

iris %>% 
    select_if(is.numeric) %>% 
    mutate_all(funs(./sum(.))) 

Wenn Sie eine Gesamtsumme nehmen möchten, können Sie einfach speichern sie es als eine weitere Säule

iris %>% select_if(is.numeric) %>% 
    mutate(totsum = sum(.)) %>% 
    mutate_at(vars(-totsum), funs(./totsum)) 

ich glaube nicht, es zu verwenden dplyr für solche nicht Spalte oder Zeile gruppiert Operationen viel zu verdienen ist.

+0

Ich denke, dass sie nicht die Summe der Spalte, sondern die Summe der DF wollen. Sie sollten stattdessen eine Matrix verwenden. – Frank

+0

Einverstanden. Oder sie können einfach die Ergebnisse von 'Iris%>% select_if (is.numeric)%>% sum() 'speichern. – shayaa

0

Wir data.table

library(data.table) 
as.data.table(iris)[, lapply(.SD, function(x) if(is.numeric(x)) x/sum(x)) else NULL)] 
Verwandte Themen