我有以下数据集:
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
请注意,这些值没有标题。
我该怎么做?
答案 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))
首先,它标识要汇总的列。其次,它计算所选列的行最大值和最小值。第三,它按“类”分组并总结了行最大和最小值的最大值和最小值。