首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的数组计算行之间的最大体积

从R中的数组计算行之间的最大体积
EN

Stack Overflow用户
提问于 2019-07-14 20:25:29
回答 1查看 37关注 0票数 1

这里是我的数组

代码语言:javascript
复制
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中的数组来计算这样的结果,而不是手动计算?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 00:51:08

您可以首先将变量名定义为数字x位置,并将其与y位置耦合。

代码语言:javascript
复制
df <- data.frame(x = seq_along(my.array),
                 y = t(my.array))

然后,我们希望将该data.frame中的每一行与data.frame中的每一行进行比较,因此我们将为将要比较的行创建一个索引。我采用了my.array的名称,因为它们已经成为df的行名,所以它们可以用作索引。

代码语言:javascript
复制
idx <- t(combn(names(my.array), 2))

接下来,我将遍历索引的行,查找相关变量并进行计算。用蓝色表示的区域的宽度是x位置的绝对差,区域的高度是两个y位置中的最小值。

代码语言:javascript
复制
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
})

然后,您可以将所有内容放在一起,以便进行后续分析

代码语言:javascript
复制
output <- cbind.data.frame(idx, area = area)
head(output)
代码语言:javascript
复制
     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    6
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57027402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档