我有一个数据集,其中长度和年龄与个别项目(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
答案 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}}