示例代码:
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的数据帧。
答案 0 :(得分:1)
如果您只是连续每10个y值查找y的最大值,那么您可以在下面使用。
内部lapply
会创建索引列表1:10
,11:20
,21:30
等等。
外lapply
将获取这些索引并从这些索引中获取y
的最大值
lapply(lapply(0:4, function(i) 1:10+ 10*i), function(vec) {max(y[vec])})
答案 1 :(得分:1)
我会使用%/%
创建群组,然后使用aggregate
。我已将您的df
从matrix
转换为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