使用订阅从一个值得出另一个值

Using subscription to conclude from a value to another value

我有两个数据框:

x1 <- c(1,2,1,3,2,2,1,2,3,2)
y1 <- c(10,10,10,11,11,11,12,12,12,13)
df1 <- data.frame(x1,y1)

y <- c(10,11,12,13)
p <- c(0.1,0.5,0.8,0.9)
df2 <- data.frame(y,p)

我想要的是 df2$p 的某种下标,以便根据 df1$x1 值的输入确定 df2$p 的值。规则:df1$x1 和 df1$y1 形成变量对。 y1$df1 的不同出现在 df2$y 中列出并且属于 df2$p 的值。例如 df1$x1[1](1)属于 df1$y1[1](10)。从df2可以看出,y = 10属于p = 0.1。所以,df1$x1[1] 等于 p = 0.1。按照这个逻辑,df1$x1[2] 属于 p = 0.1,df1$x1[3] 也是如此。 df1$x1[4]、df1$x1[5] 和 df1$x1[6] 属于 p = 0.5。 df1$x1[7]、df1$x1[8] 和 df1$x1[9] 到 p = 0.8 和 df1$x1[10] 到 p = 0.9.

期望的输出应该是这样的:

> p[input"df1$x1[1]"]
[1] 0.1
> p[input"df1$x1[10]"]
[1] 0.9
> p[input"df1$x1[6]"]
[1] 0.5

> z <- df1$x1[3]
> p[df2$y == df1$y1[df1$x1 == z]]
[1] 0.1

感谢您的每一次帮助!

使用dplyr将@bouncyball 的行合并到一个函数中:

> library(dplyr)
> lookup <- function(x) merge(df1, df2, by.x = 'y1', by.y = 'y') %>%
       slice(x) %>% select(p) %>% as.numeric()

以下是您在问题中包含的示例:

> lookup(1)
[1] 0.1
> lookup(10)
[1] 0.9
> lookup(6)
[1] 0.5