如何使用R找到一系列数字中的最大范围?

时间:2016-02-10 21:44:52

标签: r range

我有一个数据集,其中长度和年龄与个别项目(ID#)相对应,有4个不同的项目,您可以在下面的数据集中看到。

  

范围(数据集$ length)

给出了所有项目的总长度范围。但我需要比较范围以确定哪个项目(ID#)的长度范围相对于其他项目最大。

 length age  ID #
3.5      5    1
7       10    1
10      15    1
4        5    2
8       10    2
13      15    2
3       5     3
7       10    3
9       15    3
4       5     4
5       10    4
7       15    4

4 个答案:

答案 0 :(得分:2)

这为您提供了范围的差异:

lapply( with(dat, tapply(length, ID, range)), diff)

你可以在htat列表中包装which.max,以获得与最大值相关联的ID:

which.max( lapply( with(dat, tapply(length, ID, range)), diff) )
2 
2 

答案 1 :(得分:1)

在基地R:

mins <- tapply(df$length, df$ID, min)
maxs <- tapply(df$length, df$ID, max)
unique( df$ID)[which.max(maxs-mins)]

答案 2 :(得分:0)

group_by中的

dplyr可能会有所帮助:

library(dplyr)

dataset %>%
    group_by(ID) %>%
    summarize(ID_range = n())

以上代码相当于以下代码(它仅使用%>%编写):

library(dplyr)

dataset <- group_by(dataset, ID)
summarize(dataset, ID_range = n())

答案 3 :(得分:0)

一种不使用which但不太优雅的简单方法是range(dataset$length[which(dat$id == 1)]) range(dataset$length[which(dat$id == 2)]) range(dataset$length[which(dat$id == 3)]) range(dataset$length[which(dat$id == 4)]) 函数。

lapply

您还可以创建一个功能,为您提供实际范围(最大值和平均值之间的差异),并使用largest_range <- function(id){ rbind(id, (max(data$length[which(data$id == id)]) - min(data$length[which(data$id == id)]))) } lapply(X = unique(data$id), FUN = largest_range) 向您显示与其范围配对的ID。

{{1}}