如何在单个值的许多行中找到最小值和最大值

时间:2019-01-18 20:52:49

标签: r

我有以下数据集:

Class     
A       5     9     2     6
A       13    8     
A       4     8     3     10    6
B       12    5     11     
B       7     1     17    6     8     1

我想要的是在与该类相关的所有行中找到每个类的最大值和最小值。在这种情况下,我应该得到:

Class    Max    Min
A        13     2
B        33     1

请注意,这些值没有标题。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

假设输入**/*.jpg在末尾的注释中可重复显示:

DF

给出此矩阵:

min.max <- do.call("rbind", by(DF[-1], DF[[1]], range, na.rm = TRUE))
colnames(min.max) <- c("min", "max")
min.max

注意

  min max
A   2  13
B   1  17

答案 1 :(得分:1)

使用@G提供的数据。格洛腾迪克,一种tidyverse的可能性:

DF %>%
 gather(var, val, -Class) %>%
 group_by(Class) %>%
 summarise(Max = max(val, na.rm = TRUE),
        Min = min(val, na.rm = TRUE))

   Class   Max   Min
  <chr> <dbl> <dbl>
1 A       13.    2.
2 B       17.    1.

它将数据从宽到长转换,并标识每个“类”的最小值和最大值。

或者:

cols <- names(DF)[2:length(DF)]

DF %>% 
 group_by(Class) %>%
 summarise(Max = max(pmax(c(!!! rlang::syms(cols)), na.rm = TRUE), na.rm = TRUE),
        Min = min(pmin(c(!!! rlang::syms(cols)), na.rm = TRUE), na.rm = TRUE))

首先,它标识要汇总的列。然后,总结了逐行最大值和最小值的最大值和最小值。

或者:

cols <- names(DF)[2:length(DF)]

DF %>% 
 rowwise() %>%
 mutate(Max = max(c(!!! rlang::syms(cols)), na.rm = TRUE),
        Min = min(c(!!! rlang::syms(cols)), na.rm = TRUE)) %>%
 group_by(Class) %>%
 summarise(Max = max(Max, na.rm = TRUE),
           Min = min(Min, na.rm = TRUE))

首先,它标识要汇总的列。其次,它计算所选列的行最大值和最小值。第三,它按“类”分组并总结了行最大和最小值的最大值和最小值。