математическая операция группировки сумм по два столбца по категориям - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь сделать процент по группам с учетом значений из двух разных столбцов.

Я использовал dplyr, чтобы сгруппировать свои данные и затем выполнить математическую операцию. Я неправильно набрал команду, потому что результат одинаков во всех группах, я думаю, мой код показывает только один общий процент, а не по группам.

> x <- data.frame("code"=c("a","a","b","b","a","b"),"home" = c(1,1,1,1,1,1),
+                 "trap" = c(0,1,0,1,0,1))
> x
  code home trap
1    a    1    0
2    a    1    1
3    b    1    0
4    b    1    1
5    a    1    0
6    b    1    1
> x %>% 
+   group_by(code) %>% 
+   mutate(perc=(sum(trap)/sum(home)))
# A tibble: 6 x 4
# Groups:   code [2]
  code   home  trap  perc
  <fct> <dbl> <dbl> <dbl>
1 a         1     0   0.5
2 a         1     1   0.5
3 b         1     0   0.5
4 b         1     1   0.5
5 a         1     0   0.5
6 b         1     1   0.5
> 

идея состоит в том, чтобы получить вес ловушки относительно дома (который должен быть одинаковым во всех рядах одной и той же группы)

Я хочу получить этот фрейм данных:

  code   home  trap  perc
  <fct> <dbl> <dbl> <dbl>
1 a         1     0   0.333
2 a         1     1   0.333
3 b         1     0   0.666
4 b         1     1   0.666
5 a         1     0   0.333
6 b         1     1   0.666
> 

1 Ответ

0 голосов
/ 01 июля 2019

Нам просто нужно mean

x %>%
   group_by(code) %>% 
   dplyr::mutate(perc = mean(trap))
# A tibble: 6 x 4
# Groups:   code [2]
#  code   home  trap  perc
#  <fct> <dbl> <dbl> <dbl>
#1 a         1     0 0.333
#2 a         1     1 0.333
#3 b         1     0 0.667
#4 b         1     1 0.667
#5 a         1     0 0.333
#6 b         1     1 0.667

Другое значение может быть связано с тем, что summarise маскируется plyr::summarise вместо dplyr::summarise (когда оба пакета загружены в глобальную среду). Для решения этой проблемы либо укажите dplyr::, либо начните новый сеанс с загруженным только dplyr

x %>% 
    group_by(code) %>%
    dplyr::mutate(perc = sum(trap)/sum(home))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...