Inline operations, select helpers and mutate function in dplyr

I will use the following dataset to illustrate my questions:

my_df <- data.frame(
    a = 1:10,
    b = 10:1
)
colnames(my_df) <- c("a", "b")

Part 1

I use a function mutate()to create two new variables in my dataset, and I would like to compute the row facilities for two new columns inside the same call mutate(). However, I would really like to use assistants select()such as starts_with(), ends_with()or contains().

My first attempt:

 my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2,
        mean = rowMeans(select(ends_with("2")))
    )
Error in mutate_impl(.data, dots) : 
  Evaluation error: No tidyselect variables were registered.

I understand why an error occurs - the function select()does not receive any argument .data. Therefore, I change the code in ...

... my second attempt by adding a " ." inside the function select():

my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2,
        mean = rowMeans(select(., ends_with("2")))
    )
    a  b a_2 b_2 mean
1   1 10   1 100  NaN
2   2  9   4  81  NaN
3   3  8   9  64  NaN
4   4  7  16  49  NaN
5   5  6  25  36  NaN
6   6  5  36  25  NaN
7   7  4  49  16  NaN
8   8  3  64   9  NaN
9   9  2  81   4  NaN
10 10  1 100   1  NaN

, mean a_2 b_2, , NaN. , . "." select() my_df, a_2 b_2. , NaN , R .

dplyr, current_vars(), , :

 my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2,
        mean = rowMeans(select(current_vars(), ends_with("2")))
    )
Error in mutate_impl(.data, dots) : 
  Evaluation error: Variable context not set.

, , . , mutate():

 my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2
    ) %>%
    mutate(mean = rowMeans(select(., ends_with("2"))))
    a  b a_2 b_2 mean
1   1 10   1 100 50.5
2   2  9   4  81 42.5
3   3  8   9  64 36.5
4   4  7  16  49 32.5
5   5  6  25  36 30.5
6   6  5  36  25 30.5
7   7  4  49  16 32.5
8   8  3  64   9 36.5
9   9  2  81   4 42.5
10 10  1 100   1 50.5

1: mutate()? mutate() ; , . mutate() , mutate(); , , .

2

, rowMeans() ; , , , select() . , rowwise() mean(). , select() c(). :

 my_df %>%
    mutate(
        a_2 = a^2,
        b_2 = b^2
    ) %>%
    rowwise() %>%
    mutate(
        mean = mean(ends_with("2"))
    )
Error in mutate_impl(.data, dots) : 
  Evaluation error: No tidyselect variables were registered.

, , ends_with() select(), , , , , .

.

+4

Source: https://habr.com/ru/post/1692449/


All Articles