gpt4 book ai didi

r - 检查列值是否在其他两个列值的(范围)之间

转载 作者:行者123 更新时间:2023-12-03 09:46:40 29 4
gpt4 key购买 nike

我有一个看起来像这样的数据框(Dataframe X):

id  number  found
1 5225 NA
2 2222 NA
3 3121 NA

我有另一个看起来像这样的数据框(Dataframe Y):
id  number1  number2    
1 4000 6000
3 2500 3300
3 7000 8000

我想要做的是:对于 Dataframe X“number”列中的每个值,搜索它是否等于或介于 Dataframe Y 的“number1”和“number2”对值中的任何一个。此外,对于这个“number1” "和 "number2"对值,其各自的 "id"必须与 Dataframe X 中的 "id"匹配。如果这一切都是真的,那么我想在 Dataframe X 中相应行的 "found"列中插入一个 "YES":
id  number  found
1 5225 YES
2 2222 NA
3 3121 YES

我该怎么做呢?谢谢您的帮助。

最佳答案

这是一个使用 fuzzy_join 的选项

library(fuzzy_join)
library(dplyr)
fuzzy_left_join(X, Y[-1], by = c("number" = "number1", "number" = "number2"),
match_fun =list(`>=`, `<=`)) %>%
mutate(found = c(NA, "YES")[(!is.na(number1)) + 1]) %>%
select(names(X))
# id number found
#1 1 5225 YES
#2 2 2222 <NA>
#3 3 3121 YES

或者另一种选择是与 data.table 的非对等连接
library(data.table)
setDT(X)[, found := NULL]
X[Y, found := "YES", on = .(number >= number1, number <= number2)]
X
# id number found
#1: 1 5225 YES
#2: 2 2222 <NA>
#3: 3 3121 YES

数据
X <- structure(list(id = 1:3, number = c(5225L, 2222L, 3121L), found = c(NA, 
NA, NA)), class = "data.frame", row.names = c(NA, -3L))

Y <- structure(list(id = 1:3, number1 = c(4000L, 2500L, 7000L), number2 = c(6000L,
3300L, 8000L)), class = "data.frame", row.names = c(NA, -3L))

关于r - 检查列值是否在其他两个列值的(范围)之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885425/

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