[英]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.