Это как-то связано с этим вопросом: В принципе, я пытаюсь понять, как работают rowwise
операции с mutate
в нескольких столбцах, применяя более 1 функции, например (mean()
, sum()
, min()
и т. Д.).
Я узнал, что эту работу выполняет across
, а не c_across
. Я узнал, что функция mean()
отличается от функции min()
тем, что mean()
не работает с фреймами данных, и нам нужно изменить ее на вектор, что можно сделать с помощью unlist или as.matrix - ›узнал от Ронака Шаха здесь Что такое rowwise () и c_across ()
Теперь рассмотрим мой реальный случай: я смог выполнить эту задачу, но потерял один столбец d
. Как я могу избежать потери столбца d
в этой настройке.
My df:
df <- structure(list(a = 1:5, b = 6:10, c = 11:15, d = c("a", "b",
"c", "d", "e"), e = 1:5), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
Не работает:
df %>%
rowwise() %>%
mutate(across(a:e),
avg = mean(unlist(cur_data()), na.rm = TRUE),
min = min(unlist(cur_data()), na.rm = TRUE),
max = max(unlist(cur_data()), na.rm = TRUE)
)
# Output:
a b c d e avg min max
<int> <int> <int> <chr> <int> <dbl> <chr> <chr>
1 1 6 11 a 1 NA 1 a
2 2 7 12 b 2 NA 12 b
3 3 8 13 c 3 NA 13 c
4 4 9 14 d 4 NA 14 d
5 5 10 15 e 5 NA 10 e
Работает, но я теряю столбец d
:
df %>%
select(-d) %>%
rowwise() %>%
mutate(across(a:e),
avg = mean(unlist(cur_data()), na.rm = TRUE),
min = min(unlist(cur_data()), na.rm = TRUE),
max = max(unlist(cur_data()), na.rm = TRUE)
)
a b c e avg min max
<int> <int> <int> <int> <dbl> <dbl> <dbl>
1 1 6 11 1 4.75 1 11
2 2 7 12 2 5.75 2 12
3 3 8 13 3 6.75 3 13
4 4 9 14 4 7.75 4 14
5 5 10 15 5 8.75 5 15