繁体   English   中英

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

[英]How to find the largest range from a series of numbers using R?

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

范围(数据集中$长度)

给出了所有项目的整体长度范围。 但我需要比较范围以确定哪个项目(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

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

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

并且您可以将htat列表中的which.max包装起来,以便为您提供与最大值相关联的ID:

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

在基地R:

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

dplyr group_by可能会有所帮助:

library(dplyr)

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

上面的代码等同于以下代码(它只是用%>%编写):

library(dplyr)

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

一个简单的方法,不使用dplyr ,虽然可能不那么优雅,是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显示与其范围配对的ID。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM