Получить диапазон данных для каждого значения и отсортировать их - PullRequest
0 голосов
/ 17 января 2019

У меня есть следующий набор данных:

Class     Value
Abrir     15
Abrir     9
Abrir     29
Abrir     13
Salvar    10
Salvar    6
Salvar    9
Shift     16
Shift     12
Shift     10
Shift     17

Я хочу получить диапазон значений для каждого класса и отсортировать их на основе наименьшего значения, такого как следующее:

Salvar 6 - 10
Abrir  9 - 29
Shift  10 - 17

Я пытался сделать это, но не смог. Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

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

Вот базовое решение R с min и max, т.е.

df2 <- aggregate(Value ~ Class, df1, function(i) paste0(min(i), ' - ', max(i)))

#   Class   Value
#1  Abrir  9 - 29
#2 Salvar  6 - 10
#3  Shift 10 - 17

Мы можем использовать простое регулярное выражение для сортировки результирующего фрейма данных, т. Е. (Учитывая, что вышеупомянутый фрейм данных называется df2)

df2[order(as.numeric(gsub('([0-9]+)\\s-\\s[0-9]+', '\\1', df2$Value))),]

#   Class   Value
#2 Salvar  6 - 10
#1  Abrir  9 - 29
#3  Shift 10 - 17
0 голосов
/ 17 января 2019

Один из вариантов будет группировать по «Классу» и paste range из «Значения» и arrange при необходимости

library(dplyr)
library(readr)
df1 %>%
   group_by(Class) %>%
   summarise(Range = paste(range(Value), collapse = ' - ')) %>%
   arrange(parse_number(Range))
# A tibble: 3 x 2
#  Class  Range  
#  <chr>  <chr>  
#1 Salvar 6 - 10 
#2 Abrir  9 - 29 
#3 Shift  10 - 17

Или поместите его в list

aggregate(Value ~ Class, df1, FUN = range)

Данные

df1 <- structure(list(Class = c("Abrir", "Abrir", "Abrir", "Abrir", 
 "Salvar", "Salvar", "Salvar", "Shift", "Shift", "Shift", "Shift"
 ), Value = c(15L, 9L, 29L, 13L, 10L, 6L, 9L, 16L, 12L, 10L, 17L
 )), class = "data.frame", row.names = c(NA, -11L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...