Группировка и выбор нижней строки из одного столбца - PullRequest
1 голос
/ 07 апреля 2019

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

df <- data.frame(id=c("a","a","a","b","b","b","c","c","c"), 
                 name=c("a1","a2","a3","b1","b2","b3","c1","c2","c3"), 
                 v=c(1,2,3,3,1,4,3,1,2))

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

df %>%
   group_by(id) %>%
   summarise(mean(v))

Результат показывает следующее:

  id    `mean(v)`
  <fct>     <dbl>
1 a          2   
2 b          2.67
3 c          2 

Как добавить еще один столбец, в котором он выбирает a3 для a и b3 для b и c3 для c?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Выбор последней строки также можно рассматривать как суммирование:

df %>%
  group_by(id) %>%
  summarise(mean = mean(v), name = tail(name, 1))
# A tibble: 3 x 3
#   id     mean name 
#   <fct> <dbl> <fct>
# 1 a      2    a3   
# 2 b      2.67 b3   
# 3 c      2    c3   
1 голос
/ 07 апреля 2019

Все следующее будет работать.

library(dplyr)

df %>%
  group_by(id) %>%
  summarise(mean = mean(v), name = last(name))
# # A tibble: 3 x 3
#   id     mean name 
#   <fct> <dbl> <fct>
# 1 a      2    a3   
# 2 b      2.67 b3   
# 3 c      2    c3   

df %>%
  group_by(id) %>%
  summarise(mean = mean(v), name = nth(name, n()))
# # A tibble: 3 x 3
#   id     mean name 
#   <fct> <dbl> <fct>
# 1 a      2    a3   
# 2 b      2.67 b3   
# 3 c      2    c3 

df %>%
  group_by(id) %>%
  summarise(mean = mean(v), name = name[n()])
# # A tibble: 3 x 3
#   id     mean name 
#   <fct> <dbl> <fct>
# 1 a      2    a3   
# 2 b      2.67 b3   
# 3 c      2    c3

df %>%
  group_by(id) %>%
  summarise(mean = mean(v), name = name[length(name)])
# # A tibble: 3 x 3
#   id     mean name 
#   <fct> <dbl> <fct>
# 1 a      2    a3   
# 2 b      2.67 b3   
# 3 c      2    c3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...