dplyr mutent les calculs de rangs ou les fonctions personnalisées

J’essaie de muter une nouvelle variable à partir du calcul de la ligne, disons rowSums comme ci-dessous

 iris %>% mutate_(sumVar = iris %>% select(Sepal.Length:Petal.Width) %>% rowSums) 

le résultat est que “sumVar” est tronqué à sa première valeur (10.2):

 Source: local data frame [150 x 6] Groups:  Sepal.Length Sepal.Width Petal.Length Petal.Width Species sumVar 1 5.1 3.5 1.4 0.2 setosa 10.2 2 4.9 3.0 1.4 0.2 setosa 10.2 3 4.7 3.2 1.3 0.2 setosa 10.2 4 4.6 3.1 1.5 0.2 setosa 10.2 5 5.0 3.6 1.4 0.2 setosa 10.2 6 5.4 3.9 1.7 0.4 setosa 10.2 .. Warning message: Truncating vector to length 1 

Devrait-il être appliqué par rowwise ? Ou quel est le bon verbe à utiliser dans ce genre de calculs.

Modifier:

Plus précisément, existe-t-il un moyen de réaliser la fonction personnalisée en ligne avec dplyr ?

Je me demande s’il est possible de faire quelque chose comme:

 iris %>% mutate(sumVar = colsum_function(Sepal.Length:Petal.Width)) 

Ceci est plus une solution de contournement mais pourrait être utilisé

 iris %>% mutate(sumVar = rowSums(.[1:4])) 

Comme écrit dans les commentaires, vous pouvez également utiliser une select dans mutate pour obtenir les colonnes que vous souhaitez résumer, par exemple

 iris %>% mutate(sumVar = rowSums(select(., contains("Sepal")))) %>% head 

ou

 iris %>% mutate(sumVar = select(., contains("Sepal")) %>% rowSums()) %>% head 

Une manière plus compliquée serait:

  iris %>% select(Sepal.Length:Petal.Width) %>% mutate(sumVar = rowSums(.)) %>% left_join(iris) 

Ajouter le commentaire de @ docendodiscimus comme réponse. +1 à lui!

 iris %>% mutate(sumVar = rowSums(select(., contains("Sepal")))) 

J’utilise cette solution simple, qui est une modification plus robuste de la réponse de Davide Passaretti:

 iris %>% select(Sepal.Length:Petal.Width) %>% transmute(sumVar = rowSums(.)) %>% bind_cols(iris, .) 

(Mais cela nécessite un ordre de lignes défini, ce qui devrait aller, sauf si vous travaillez avec des jeux de données distants peut-être ..)