示例代码:
rander <- seq(1, 26000, 45.7)
y <- sample(rander, 50)
x <- seq(1, 50, 1)
df <- cbind(x, y)
df
我将如何确定每 10 个 x 单位的 y 的最大值?所以我想找到 (for x[1-10], max(y)) 。
编辑:我想为 x 的 5 10 个单位段中的每一个提供一个最大 5 y 的数据框。
示例代码:
rander <- seq(1, 26000, 45.7)
y <- sample(rander, 50)
x <- seq(1, 50, 1)
df <- cbind(x, y)
df
我将如何确定每 10 个 x 单位的 y 的最大值?所以我想找到 (for x[1-10], max(y)) 。
编辑:我想为 x 的 5 10 个单位段中的每一个提供一个最大 5 y 的数据框。
如果您只是连续寻找每 10 个 y 值的 y 最大值,那么您可以在下面使用。
innerlapply创建一个索引列表1:10,11:20等等21:30。外部将获取这些索引并从这些索引lapply中获取最大值y
lapply(lapply(0:4, function(i) 1:10+ 10*i), function(vec) {max(y[vec])})
我会%/%用来创建组,然后使用aggregate. 我已将您df的 a转换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