gpt4 book ai didi

r - 根据来自不同数据帧的 2 个键定义数据帧中列的值

转载 作者:行者123 更新时间:2023-12-04 11:35:57 24 4
gpt4 key购买 nike

我有以下数据框:

a <- seq(0, 5, by = 0.25)
b <-seq(0, 20, by = 1)
df <- data.frame(a, b)

我想根据列 a 和 b 以及下面的转换表创建一个新列“值”:
a_min <- c(0,2, 0,2)
a_max <- c(2,5,2,5)
b_min <- c(0,0,10,10)
b_max <- c(10,10,30,30)
output <-c(1,2,3,4)

conv <- data.frame(a_min, a_max, b_min, b_max, output)

我尝试使用 dplyr::mutate 来做到这一点,但没有取得多大成功......
require(dplyr)
mutate(df, value = calcula(conv, a, b))

较长的物体长度不是较短物体长度的倍数

我的期望是获得像上面的“df”这样的数据框,并具有如下所示的附加列值:
df$value <- c(rep(1,8), rep(2,2), rep(4,11))

最佳答案

使用二进制非等连接的可能的相对简单且非常有效的 data.table 解决方案

library(data.table) # v1.10.0
setDT(conv)[setDT(df), output, on = .(a_min <= a, a_max >= a, b_min <= b, b_max >= b)]
## [1] 1 1 1 1 1 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4

作为旁注,如果 output column 只是 conv 内的行索引,您可以通过指定 which = TRUE 来请求行索引,从而使此连接更加高效。
setDT(conv)[setDT(df), on = .(a_min <= a, a_max >= a, b_min <= b, b_max >= b), which = TRUE]
## [1] 1 1 1 1 1 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4

关于r - 根据来自不同数据帧的 2 个键定义数据帧中列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com