R 求两个向量的交集

R 求两个向量的交集,r,intersection,line-intersection,R,Intersection,Line Intersection,我有两个向量。我需要找到这两者之间的交叉点,然后画一个很好的图 下面是一个非常简单的数据帧示例: df <- data.frame( id <- c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2), p <-c(5,7,9,11,13,15,17,19,21,23,20,18,16,14,12,10,8,6,4,2 ), q <-c(3,5,7,13,19,31,37,5

我有两个向量。我需要找到这两者之间的交叉点,然后画一个很好的图

下面是一个非常简单的数据帧示例:

df <- data.frame( id <- c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2),
                 p <-c(5,7,9,11,13,15,17,19,21,23,20,18,16,14,12,10,8,6,4,2 ),
                 q <-c(3,5,7,13,19,31,37,53,61,67,6,18,20,24,40,46,66,70,76,78))
colnames(df) <- c("id","price","quantity")

supply <- df[df$id == 1,]
demand <- df[df$id == 2,]

plot( x = supply$quantity,  y = supply$price, type = "l", ylab = "price", xlab = "quantity")
lines(x = demand$quantity , y = demand$price, type = "l")
grid()

df创建数据帧时要小心。您想要的是
=
,而不是
请小心创建数据帧。如果它们是行,您需要的是
=
,而不是
!我想你需要先学一点数学再进一步。请查阅一些关于线性拟合(又称线性回归)的资料,然后到任何一本几何书籍上获取两条(非平行)直线相交的公式。数据最多是分段线性的,所以你不能真正进行线性近似,它不会给出正确的结果。在这种情况下,你需要给出一个线性的定义“相交。”例如,你想要样条曲线拟合的相交吗?你想解决的实际问题是什么?(引用Munger Guru的数据)如果你的源数据很糟糕,那么找到一个交叉点对你没有帮助。@Carl:在我看来,OP试图找出均衡数量和均衡价格:数量/价格,即需求量/供应量。这对我来说不是编程问题。投票关闭这个问题似乎是离题的,因为它是关于ec的如果它们是直线!我想你在继续之前需要学一点数学。请查阅一些关于线性拟合(又称线性回归)的资料,然后到任何一本几何书籍上获得两个(非平行)交点的公式线。数据充其量是分段线性的,因此你不能真正进行线性近似,它不会给出正确的结果。在这种情况下,你需要给出“相交”的定义。例如,你想要样条拟合的相交吗?你试图解决的实际问题是什么?(引用数据Munger Guru)如果你的源数据很糟糕,那么找到一个交叉点对你没有帮助。@Carl:在我看来,OP试图找出均衡数量和均衡价格:数量/价格,即需求量/供应量。这对我来说不是编程问题。投票关闭这个问题似乎是离题的,因为它是关于ec的经济学谢谢!只是一个快速跟进,为什么
=
而不是
谢谢!只是一个快速跟进,为什么
=
而不是

df <- data.frame( 
  id       = factor(rep(c("supply", "demand"), each = 10)),
  price    = c(5,7,9,11,13,15,17,19,21,23,20,18,16,14,12,10,8,6,4,2 ),
  quantity = c(3,5,7,13,19,31,37,53,61,67,6,18,20,24,40,46,66,70,76,78)
)
quantity_points <- with(
  df,
  seq(min(quantity), max(quantity), length.out = 500)
)
by_id <- split(df[, c("price", "quantity")], df$id)
interpolated_price <- lapply(
  by_id,
  function(x)
  {
    with(
      x,
      approx(
        quantity,
        price, 
        xout = quantity_points
      )
    )$y       
  }
)
index_of_equality <- with(interpolated_price, which.min(abs(supply - demand)))
quantity_points[index_of_equality]