Tho*_*rst 1 intersection r 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,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()
现在,我可以绘制它们并手动找到交点,但是你可以让R计算这两条线之间的交点吗?
数据可以进行大幅度的跳跃,线条可以从非常水平到近乎水平.
小心创建数据框.你想要的=不是<-.此外,为了清楚起见,将id设为一个因素.
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)
然后我们approx用来计算每个数量的价格,分别用于供需.
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]