dplyr: почему индивидуальные подсчеты и индексы отличаются - PullRequest
0 голосов
/ 11 января 2019

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

iris %>% 
  group_by(Species) %>% 
  mutate(Count = sum(Sepal.Length + Sepal.Width + Petal.Length + Petal.Width))

Не дает тот же результат, что и

iris %>% mutate(count = sum(.[1:ncol(.)])

Или

  iris %>% 
  group_by(Species) %>% 
  mutate(Count = map_if(is.numeric, sum(rowSums(.))))

А как я могу использовать индексы столбцов, чтобы создать сумму подсчета для вставки в функцию с переменными именами столбцов? (Первоначальная причина для индексации)

1 Ответ

0 голосов
/ 11 января 2019

Подход был бы к nest после group_by, циклически перебирая вложенные «данные» с помощью map, выбирая числовые столбцы (select_if), mutate, чтобы создать «Счет», получая sum из rowSums и unnest

library(tidyverse)
iris %>% 
  group_by(Species) %>% 
  nest %>%
  mutate(data = map(data, ~ .x %>% 
                              select_if(is.numeric) %>% 
                              mutate(Count = sum(rowSums(.))))) %>% 
                              #or use reduce with sum
                              # mutate(Count = reduce(., `+`) %>% sum))) %>%
  unnest 
# A tibble: 150 x 6
#   Species Sepal.Length Sepal.Width Petal.Length Petal.Width Count
#   <fct>          <dbl>       <dbl>        <dbl>       <dbl> <dbl>
# 1 setosa           5.1         3.5          1.4         0.2  507.
# 2 setosa           4.9         3            1.4         0.2  507.
# 3 setosa           4.7         3.2          1.3         0.2  507.
# 4 setosa           4.6         3.1          1.5         0.2  507.
# 5 setosa           5           3.6          1.4         0.2  507.
# 6 setosa           5.4         3.9          1.7         0.4  507.
# 7 setosa           4.6         3.4          1.4         0.3  507.
# 8 setosa           5           3.4          1.5         0.2  507.
# 9 setosa           4.4         2.9          1.4         0.2  507.
#10 setosa           4.9         3.1          1.5         0.1  507.
# ... with 140 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...