R中凸空间的交集

3
我有以下数据框:
structure(list(C1 = c(1, 2, 2, 3, 4, 5, 5, 6), C2 = c(3.5, 3, 
2.5, 2, 3, 2, 3, 5), C3 = c(6.5, 8, 9, 5, 7, 4, 3, 6)), row.names = c(NA, 
-8L), class = c("tbl_df", "tbl", "data.frame"))

第一列是索引。第一个观察点由1个点特征化,第二个观察点由2个点特征化。

我需要将所有观察组合的交集变为单向。结果创建一个新的数据框,具有新的索引,其中再次存在一些由2行/点特征化的观察:1-2、1-3、1-4、1-5、1-6、2-3、2-4、2-5、2-6、3-4、3-5、3-6、4-5、4-6、5-6:

df2 = structure(list(C1 = c(1, 2, 3, 4, 4, 5, 6,7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15, 15), C2 = c(3,2,3,3,2,3.5,2,3,2,3,3,2,3,2,2,2,3,3,2,3), C3 = c(6.5,5,6.5,3,4,6,5,7,4,3,6,5,3,4,5,4,3,6,4,3)), row.names = c(NA, 
                                                                                                                         -20L), class = c("tbl_df", "tbl", "data.frame"))

第一列中的3是通过交叉前两个观测值创建的新观测值。

我曾尝试在每行使用pmin,但它不起作用。有人能解决这个问题吗? 图形表示


如果你把这些点放在一个二维坐标轴上,就能更清楚地看到这个交集的具体含义。我们有空间,这是点和轴之间的区域。这个交集是指1和2共同拥有的区域的那个点。清楚了吗? - Simon
1
我不太清楚...你在索引2处有两个点.. 你如何处理它? - Sotos
我在问题中添加的图表是否更好?图表上的1和2被倒置了。 - Simon
为什么是3而不是2呢?因为它还与另一个点(2;9)相交。 - Tensibai
在这个图表上,3就是1和2的共同点,对吧? - Simon
显示剩余8条评论
1个回答

1

我不确定代码是否是你想要的东西,其中使用了 cummin()

df2 <- cbind(df[1],cummin(df[-1]))
> df2
  C1  C2  C3
1  1 3.5 6.5
2  2 3.0 6.5
3  2 2.5 6.5
4  3 2.0 5.0
5  4 2.0 5.0
6  5 2.0 4.0
7  5 2.0 3.0
8  6 2.0 3.0

数据

df <- structure(list(C1 = c(1, 2, 2, 3, 4, 5, 5, 6), C2 = c(3.5, 3, 
2.5, 2, 3, 2, 3, 5), C3 = c(6.5, 8, 9, 5, 7, 4, 3, 6)), row.names = c(NA, 
-8L), class = c("tbl_df", "tbl", "data.frame"))

我不清楚它的作用。我只需要像图片上那样的交集。例如,1和2在一起应该是(3,6.5) - Simon
@Simon,我不是很清楚我是否正确理解了你的目标...对于df2的第3行,它意味着它将保留来自df中C2的较低值3,但跳过C3中的值9,因为它比df2的第2行中现有的值6更高...你明白我的意思吗? - ThomasIsCoding
你说得没错,但如果数据稍有不同,cummin()函数就无法正常工作。 - Simon
谢谢!请尝试使用以下代码作为数据框:structure(list(C1 = c(1, 2, 2, 3, 4, 5, 5, 6), C2 = c(3.5, 3, 2.5, 2, 3, 2, 3, 5), C3 = c(6.5, 8, 9, 5, 7, 4, 3, 6)), row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame")) - Simon
我已经添加了df2,它是完整的预期输出。谢谢。 - Simon
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接