这里是我的数组
my.array=structure(list(var1 = 1L, var2 = 8L, var3 = 6L, var4 = 2L, var5 = 5L,
var6 = 4L, var7 = 8L, var8 = 3L, var9 = 7L), .Names = c("var1",
"var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9"
), class = "data.frame", row.names = c(NA, -1L))在直方图中,这个数组以线条的形式出现(对不起,我是在画中画的)

如何找到两条线,在这两条线之间可以放置最大体积的任何东西(例如水)
我把水箱里的水涂成蓝色。从视觉上看,我看到7 point上的最大体积沿着线2 and 9 of x asis之间的y axis。(7*7=49)。因为9 line有y轴的最后一个point on 7,而line two有最后的point 8 on y asis,形成尽可能多的填充体积,形成一条体积最大的长直线。
我如何通过我在R中的数组来计算这样的结果,而不是手动计算?
发布于 2019-07-15 00:51:08
您可以首先将变量名定义为数字x位置,并将其与y位置耦合。
df <- data.frame(x = seq_along(my.array),
y = t(my.array))然后,我们希望将该data.frame中的每一行与data.frame中的每一行进行比较,因此我们将为将要比较的行创建一个索引。我采用了my.array的名称,因为它们已经成为df的行名,所以它们可以用作索引。
idx <- t(combn(names(my.array), 2))接下来,我将遍历索引的行,查找相关变量并进行计算。用蓝色表示的区域的宽度是x位置的绝对差,区域的高度是两个y位置中的最小值。
area <- apply(idx, 1, function(i){
# i will be a row of idx, so i[[1]] has the first column and i[[2]] the second
dx <- abs(df[i[[1]], "x"] - df[i[[2]], "x"])
ymin <- min(df[i[[1]], "y"], df[i[[2]], "y"])
dx * ymin
})然后,您可以将所有内容放在一起,以便进行后续分析
output <- cbind.data.frame(idx, area = area)
head(output) 1 2 area
1 var1 var2 1
2 var1 var3 2
3 var1 var4 3
4 var1 var5 4
5 var1 var6 5
6 var1 var7 6https://stackoverflow.com/questions/57027402
复制相似问题