I'm trying to mutate a new variable from sort of row calculation,
say rowSums
as below
iris %>%
mutate_(sumVar =
iris %>%
select(Sepal.Length:Petal.Width) %>%
rowSums)
the result is that "sumVar" is truncated to its first value(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
Should it be rowwise
applied? Or what's the right verb to use in these kind of calculations.
Edit:
More specifically, is there any way to realize the inline custom function with dplyr
?
I'm wondering if it is possible do something like:
iris %>%
mutate(sumVar = colsum_function(Sepal.Length:Petal.Width))
iris %>% select(Sepal.Length:Petal.Width) %>% rowSums()
works fine butiris %>% mutate(sumVar = iris %>% select(Sepal.Length:Petal.Width) %>% rowSums())
throws a "Error: Bad indices 1" + warning message. – talat.
(I am also doing something silly sometimes). – Davide Passarettisum
that already have an efficient vectorised row-wise alternative, the proper way is currently:df %>% mutate(total = rowSums(across(where(is.numeric))))
across
can take anything thatselect
can (e.g.rowSums(across(Sepal.Length:Petal.Width))
also works). See the full spiel about row-wise and across – Fons MA