我有以下数据集:
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
我尝试这样做,但是我做不到。有人可以帮我吗?
答案 0 :(得分:2)
一种选择是根据需要对“类”和paste
,“值”的range
和arrange
进行分组{p>
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))
答案 1 :(得分:2)
这是具有min
和max
的基本R解决方案,即
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