我有一些价值观 df:

# A tibble: 7 × 1
   var1
  <dbl>
1     0
2    10
3    20
4   210
5   230
6   266
7   267

我想将其与第二个数据帧进行比较 value_lookup

# A tibble: 4 × 2
   var1 value
  <dbl> <dbl>
1     0     0
2   200    10
3   230    20
4   260    30

具体地说,我想基于>=进行连接,这意味着大于或等于var1中的数字的值将得到x的值.例如,取原始数据帧的数字210.因为它是>= 200<230,所以它的值将是10.

以下是前expected output名:

  var1 value
1    0     0
2   10     0
3   20     0
4  210    10
5  230    20
6  266    30
7  267    30

我认为用{fuzzyjoin}应该可以做到,但我做不到.

value_lookup <- tibble(var1 = c(0, 200,230,260),
                       value = c(0,10,20,30))

df <- tibble(var1 = c(0,10,20,210,230,266,267))

library(fuzzyjoin)
fuzzyjoin::fuzzy_left_join(
  x = df, 
  y = value_lookup ,
  by = "var1",
  match_fun = list(`>=`)
) 

推荐答案

一个选项也是findInterval:

df$value <- value_lookup$value[findInterval(df$var1, value_lookup$var1)]

输出:

  var1 value
1    0     0
2   10     0
3   20     0
4  210    10
5  230    20
6  266    30
7  267    30

正如您提到的联接,您还可以使用参数roll = T通过data.table进行滚动联接,以查找dfvar1之前的相同或最接近的值:

library(data.table)

setDT(value_lookup)[setDT(df), on = 'var1', roll = T]

R相关问答推荐

从API中抓取R数据SON

更改绘图上的x轴断点,而不影响风险?

从R导出全局环境中的所有sf(numrames)对象

如何从R中的字符串元素中减go 一个数字?

如何在emmeans中计算连续变量的对比度

我不能在docker中加载sf

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

将文件保存到新文件夹时,切换r设置以不必创建目录

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

有效识别长载体中的高/低命中

从圆到R中的多边形的标绘雷达图

有没有办法一次粘贴所有列

在R中,如何从一系列具有索引名的变量快速创建数据帧?

是否可以将线性模型的p值添加到tbl_summary中

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

将美学添加到ggploy中的文本标签

使用卡环从R中的列中删除单位(&C)

将`magick`对象转换为原始向量

移除y轴断开的geom_bar图的外框

从不同长度的列中随机排序特定数量的元素