Mutate value only for numeric columns AND only in the first and last row of a data frame using dplyr

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP


Mutate value only for numeric columns AND only in the first and last row of a data frame using dplyr



Given a data frame like:


library(dplyr)
library(lubridate)

df <- data.frame(
date = seq(ymd('2018-01-01'), ymd('2018-01-10'), by = 'days'),
location = "AMS",
V1 = seq(1:10),
V2 = seq(11:20)
)



I would like to use dplyr to change the value of the first and last row, and only in numeric columns.


dplyr



I can do it for one column, as in:


df %>%
mutate(V1 = ifelse(row_number()==1, mean(V1)*100, V1)) %>%
mutate(V1 = ifelse(row_number()==nrow(.), mean(V1)*100, V1))



However I cannot manage to find a way to use mutate_at or mutate_if to do that for all numeric columns at once. Could you help me with that?


mutate_at


mutate_if





I suspect you don't mean to use seq() for V1 and V2, as the : notation already returns a vector
– zack
16 mins ago


seq()


V1


V2


:




1 Answer
1



I think this addresses your issue:


df <- data.frame(
date = seq(ymd('2018-01-01'), ymd('2018-01-10'), by = 'days'),
location = "AMS",
V1 = 1:10,
V2 = 11:20
)

df %>% mutate_at(vars(V1, V2),
funs(ifelse(row_number() %in% c(1, n()), mean(.)*100, .)))

date location V1 V2
1 2018-01-01 AMS 550 1550
2 2018-01-02 AMS 2 12
3 2018-01-03 AMS 3 13
4 2018-01-04 AMS 4 14
5 2018-01-05 AMS 5 15
6 2018-01-06 AMS 6 16
7 2018-01-07 AMS 7 17
8 2018-01-08 AMS 8 18
9 2018-01-09 AMS 9 19
10 2018-01-10 AMS 550 1550



If you'd like to do it on all numeric columns, you can just use mutate_if with is.numeric as the .predicate argument.


mutate_if


is.numeric


.predicate






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Makefile test if variable is not empty

Will Oldham

'Series' object is not callable Error / Statsmodels illegal variable name