Как мутировать по группам? - PullRequest
2 голосов
/ 18 марта 2020

Я пытаюсь изменить новую переменную в зависимости от средней функции каждой группы. Я попытался запустить этот код, используя предварительно загруженный фрейм данных «ToothGrowth», доступный в R.

Вывод Результаты неверны, похоже, что они зацикливают средства каждой группы в виде списка вместо назначения каждой группе.

Диаграмма, показывающая, чего я пытаюсь достичь:

image of what I am trying to achive, How to mutate by groups?

data("ToothGrowth")
head(ToothGrowth)

tg.tb01<-ToothGrowth %>% 
group_by(supp, dose) %>% # mydata has 3 more variables. 
  summarise(mean = mean(len)) %>% 
  print()
ToothGrowth %>% 
  group_by(supp) %>%
  mutate(submean2 = len - tg.tb01$mean/tg.tb01$dose)

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Вам не нужен другой набор данных для хранения среднего значения. Смотрите ниже:

library(dplyr)
library(datasets)

ToothGrowth %>% 
  group_by(supp, dose) %>%
  mutate(lenmean = mean(len),
         submean2 = len - lenmean/dose)

#> # A tibble: 60 x 5
#> # Groups:   supp, dose [6]
#>      len supp   dose lenmean submean2
#>    <dbl> <fct> <dbl>   <dbl>    <dbl>
#>  1   4.2 VC      0.5    7.98   -11.8 
#>  2  11.5 VC      0.5    7.98    -4.46
#>  3   7.3 VC      0.5    7.98    -8.66
#>  4   5.8 VC      0.5    7.98   -10.2 
#>  5   6.4 VC      0.5    7.98    -9.56
#>  6  10   VC      0.5    7.98    -5.96
#>  7  11.2 VC      0.5    7.98    -4.76
#>  8  11.2 VC      0.5    7.98    -4.76
#>  9   5.2 VC      0.5    7.98   -10.8 
#> 10   7   VC      0.5    7.98    -8.96
#> # ... with 50 more rows
2 голосов
/ 18 марта 2020

Если я правильно понимаю, вы должны использовать вместо этого. Пожалуйста, укажите желаемый результат с номерами.

tg.tb01<-ToothGrowth %>% 
    group_by(supp, dose) %>%
    mutate(mean = mean(len)) %>%
    ungroup() %>%
    group_by(supp) %>%
    mutate(submean2 = len - mean/dose)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...