使用订阅从一个值得出另一个值
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
我有两个数据框:
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