Как сохранить другие столбцы при использовании dplyr? - PullRequest
3 голосов
/ 30 марта 2020

У меня похожая проблема, как описано Как объединить некоторые столбцы, сохраняя другие столбцы в R? , но ни одно из решений, которые я там пробовал, не работает.

У меня есть фрейм данных, подобный этому:

df<-data.frame(a=rep(c("a","b"),each=2),b=c(500,400,200,300), 
               c = c(5,10,2,4),stringsAsFactors = FALSE) 
> df
  a   b  c
1 a 500  5
2 a 400 10
3 b 200  2
4 b 300  4

df%>%
  group_by(a)%>%
  summarise('max' = max(c), 'sum'=sum(c))

  a       max   sum
  <chr> <dbl> <dbl>
1 a        10    15  
2 b         4     6

but I need also column b:

1 a        10    15   400
2 b         4     6   300

Значение для столбца b является максимальным (c).


Редактировать данные для указанных c регистр:

> df
  a   b  c
1 a 500  5
2 a 400  5

в этом случае мне нужно более высокое значение col b в сводке

#   a       max   sum     b
#   <chr> <dbl> <dbl> <dbl>
# 1 a         5    10   500

Ответы [ 3 ]

3 голосов
/ 30 марта 2020

Необходимо указать способ суммирования переменной b:

df %>%
  group_by(a) %>%
  summarise(max = max(c), sum = sum(c), b = max(b[c == max(c)]))

# # A tibble: 2 x 4
#   a       max   sum     b
#   <chr> <dbl> <dbl> <dbl>
# 1 a        10    15   400
# 2 b         4     6   300

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

Я бы заменил summarise на mutate (сохраняет все строки), а затем отфильтровал нужные строки. Затем тиббл все еще группируется, поэтому для избавления от групп требуется ungroup.

d f%>%
    group_by(a) %>%
    mutate('max' = max(c), 'sum'=sum(c)) %>% 
    filter(c == max) %>%
    ungroup()

#   a         b     c   max   sum
#   <chr> <dbl> <dbl> <dbl> <dbl>
# 1 a       400    10    10    15
# 2 b       300     4     4     6
1 голос
/ 30 марта 2020

Обновлено, так как вопрос был отредактирован

df%>%
  group_by(a)%>%
  summarise('max' = max(c), 'sum'=sum(c), b=max(b))

# A tibble: 2 x 4
#   a       max   sum     b
#  <chr>  <dbl>  <dbl> <dbl>
# 1 a        10    15   500
# 2 b         4     6   300
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...