Найти значение другой группы, которая дает максимум - PullRequest
1 голос
/ 23 апреля 2020

Это мой фрейм данных:

df_test <- data.frame(Report=c("A-1","A-2","A-3","A-4","B-1","B-2"),grp=c("A","A","A","A","B","B"),defect=c("m","m","m","c","d","e"))

Для каждой группы я хочу выяснить количество отчетов, и какой дефект вносит вклад в максимальное значение группы, и если есть значение ie тогда я хотел бы вывести свернутое значение столбцов, которое t ie.

Ожидаемый результат:

df_out<-data.frame(grp=c("A","B"),defect_list=c("m;c","d;e"),nreports=c(4,2),max_defect_list=c("m","d;e"),max_defect=c(3,1))

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Один из способов будет:

library(dplyr)

df_test %>%
  group_by(grp) %>%
  add_count(defect) %>%
  summarise(
    defect_list = paste(unique(defect), collapse = ';'),
    nreports = n(),
    max_defect_list = paste(unique(defect[which(n == max(n))]), collapse = ';'),
    max_defect = max(n)
  )

Вывод:

# A tibble: 2 x 5
  grp   defect_list nreports max_defect_list max_defect
  <fct> <chr>          <int> <chr>                <int>
1 A     m;c                4 m                        3
2 B     d;e                2 d;e                      1
1 голос
/ 23 апреля 2020

Используя data.table, мы также можем сделать

library(data.table)
setDT(df_test)[,  n := .N,  .(grp, defect)][, 
     .(defect_list = paste(unique(defect), collapse=";"), 
       nreports = .N, 
       max_defect_list =  paste(unique(defect[which(n == max(n))]), collapse = ';'),
       max_defect = max(n)), .(grp)]
#   grp defect_list nreports max_defect_list max_defect
#1:   A         m;c        4               m          3
#2:   B         d;e        2             d;e          1
...