确定x中给定范围的最大y

时间:2013-10-14 04:00:28

标签: r

示例代码:

rander <- seq(1, 26000, 45.7)
y <- sample(rander, 50)
x <- seq(1, 50, 1)
df <- cbind(x, y)
df

我如何确定每10个x单位的y的最大值?所以我想找(对于x [1-10],max(y))。

编辑: 我希望最终为x 10的10 10单位段中的每一个都提供最大5 y的数据帧。

2 个答案:

答案 0 :(得分:1)

如果您只是连续每10个y值查找y的最大值,那么您可以在下面使用。

内部lapply会创建索引列表1:1011:2021:30等等。 外lapply将获取这些索引并从这些索引中获取y的最大值

lapply(lapply(0:4, function(i) 1:10+ 10*i), function(vec) {max(y[vec])})

答案 1 :(得分:1)

我会使用%/%创建群组,然后使用aggregate。我已将您的dfmatrix转换为data.frame(我在生成示例数据时使用了set.seed(1),以防其他人想要尝试复制它:

df <- data.frame(df)
df$group <- 0:(nrow(df)-1) %/% 10
aggregate(y ~ group, df, max)
#   group       y
# 1     0 24267.7
# 2     1 25318.8
# 3     2 23445.1
# 4     3 24953.2
# 5     4 19834.8

或者,您可能需要考虑cut

df$intervals <- cut(df$x, seq(0, max(df$x), 10))
aggregate(y ~ intervals, df, max)
#   intervals       y
# 1    (0,10] 24267.7
# 2   (10,20] 25318.8
# 3   (20,30] 23445.1
# 4   (30,40] 24953.2
# 5   (40,50] 19834.8