dplyr muter rowSums des calculs ou des fonctions personnalisées
Je suis en train de muter une nouvelle variable d'une sorte de calcul de ligne,
dire 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: <by row>
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 rowwise
appliquée? Ou quel est le bon verbe à utiliser dans ce genre de calculs.
Edit:
Plus précisément, est-il possible de réaliser la ligne de fonction personnalisée avec dplyr
?
Je me demandais si il est possible de faire quelque chose comme:
iris %>%
mutate(sumVar = colsum_function(Sepal.Length:Petal.Width))
- Vraiment étrange que
iris %>% select(Sepal.Length:Petal.Width) %>% rowSums()
fonctionne très bien maisiris %>% mutate(sumVar = iris %>% select(Sepal.Length:Petal.Width) %>% rowSums())
lance une "Erreur: Mauvais indices 1" + message d'avertissement. - Je suis en train de travailler sur elle avec des approches différentes, mais cette erreur apparaît très fréquemment à l'aide d'
.
(je suis aussi de faire quelque chose de stupide, parfois).
Vous devez vous connecter pour publier un commentaire.
C'est plus une solution de contournement, mais pourrait être utilisé
Comme écrit dans les commentaires, vous pouvez également utiliser un
select
à l'intérieur de muter pour obtenir les colonnes que vous souhaitez pour résumer, par exempleou
dplyr
utilisez-vous? Quand j'essaye de vous exemple avecdplyr_0.4.1
, je reçois une exception:Error in is.data.frame(x) : object '.' not found
.Error in is.data.frame(x) : object '.' not found
était parce que j'avais une vieille version demagrittr
. Lorsque j'ai mis à jour à partir demagrittr_1.0.1
àmagrittr_1.5
, tout a bien fonctionné.match
oucontains
à la place de la.[1:4]
?iris %>% mutate(sumVar = rowSums(select(., contains("Sepal")))) %>% head
ouiris %>% mutate(sumVar = select(., contains("Sepal")) %>% rowSums()) %>% head
Une plus compliqué serait:
left_join
sons une solution sympa si de l'utiliser avecby
clé; cependant, il n'est pas aussi robuste et intuitif pour cette circonstanceAjoutant @docendodiscimus commentaire comme une réponse. +1 pour lui!
Je suis à l'aide de cette solution simple, qui est plus robuste et la modification de la réponse par Davide Passaretti:
(Mais il nécessite une ligne définie ordre, qui doit être fine, à moins de travailler à distance avec des ensembles de données peut être..)
Vous pouvez également utiliser un grep en place de
contains
oumatches
, juste au cas où vous avez besoin pour obtenir la fantaisie avec les expressions régulières (matches
ne semble pas beaucoup comme négatif lookaheads et la comme dans mon expérience).