Как добавить значения сводной статистики в каждую строку фрейма данных? - PullRequest
3 голосов
/ 13 апреля 2019

Мне бы хотелось узнать, как можно добавить итоговую статистику к каждой строке кадра данных.

Приведенный ниже код работает, но должен быть быстрее, не так ли?

library("tidyverse")
data <- (iris)

means <- iris %>%
  group_by(Species) %>%
  summarise(
    Sepal.Length = mean(Sepal.Length),
    Sepal.Width = mean(Sepal.Width)
  )

data <- merge(data, means, by = "Species")

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Один из способов сделать это - использовать mutate.

library("tidyverse")
data <- (iris)

data<-data %>% 
  group_by(Species) %>% 
  mutate(Sepal.Length.y=mean(Sepal.Length), Sepal.Width.y=mean(Sepal.Width)) 



Так что это очень похоже на то, что у вас было раньше, но отсекает несколько шагов.Если вы хотите изменить порядок столбцов, вы можете изменить их порядок.Кроме того, я бы порекомендовал изменить имена столбцов на Sepal.Length и Sepal.Width в вашем сообщении, но если вы не укажете уникальное имя, r просто добавит .y к ним, чтобы сделать их уникальными.Надеюсь, это поможет.

1 голос
/ 13 апреля 2019

Вы можете сделать это с помощью dplyr::mutate_at:

iris %>% group_by(Species) %>% 
  mutate_at(.vars = vars(Sepal.Length,Sepal.Width), 
    .funs = list(mean = ~mean))

Нам нужен бит list(mean = ~mean) вместо просто .funs = mean для переименования столбцов вместо записи поверх исходных.

# A tibble: 150 x 7
# Groups:   Species [3]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length_mean Sepal.Width_mean
          <dbl>       <dbl>        <dbl>       <dbl> <fct>               <dbl>            <dbl>
 1          5.1         3.5          1.4         0.2 setosa               5.01             3.43
 2          4.9         3            1.4         0.2 setosa               5.01             3.43
 3          4.7         3.2          1.3         0.2 setosa               5.01             3.43
 4          4.6         3.1          1.5         0.2 setosa               5.01             3.43
 5          5           3.6          1.4         0.2 setosa               5.01             3.43
 6          5.4         3.9          1.7         0.4 setosa               5.01             3.43
 7          4.6         3.4          1.4         0.3 setosa               5.01             3.43
 8          5           3.4          1.5         0.2 setosa               5.01             3.43
 9          4.4         2.9          1.4         0.2 setosa               5.01             3.43
10          4.9         3.1          1.5         0.1 setosa               5.01             3.43
...