提问人:Redesfist 提问时间:9/6/2023 最后编辑:r2evansRedesfist 更新时间:9/6/2023 访问量:30
如何找出哪些值对应于另一个数据帧中的范围?[复制]
How to find out which values correspond to a range in another dataframe? [duplicate]
问:
我正在尝试找出我的一个数据帧中的哪些值介于另一个数据帧的值之间,并基于此将数据放入列中。
假设我有 2 个 DataFrame,第一个是:
名字 | 法典 | 活动 |
---|---|---|
苹果 | 02050 | |
三星 | 54004 | |
克鲁格 | 06001 |
第二个DF:
活动 | 左 | 右 |
---|---|---|
移动 | 01100 | 01700 |
计算机 | 02000 | 03000 |
汽车 | 03000 | 04000 |
电视 | 05000 | 10000 |
期望输出:
名字 | 法典 | 活动 |
---|---|---|
苹果 | 02050 | 计算机 |
三星 | 54004 | |
克鲁格 | 06001 | 电视 |
df1 <- data.frame(Name = c("Apple","Samsung", "Kruger"),
Code = c("02050","54004", "06001"),
Activity = "")
df2 <- data.frame(Activity = c("Mobile","computers", "cars", "tv"),
Left = c("01100","02000", "03000", "05000"),
Right = c("01700","03000", "04000", "10000"))
我一整天都被困在这个问题上。我主要尝试使用 sqldf、left_join 和 which,但不断出现错误。无法理解为什么which()不起作用,只需执行以下操作即可:
df1[which(as.numeric(df1$code) < as.numeric(df2$RIGHT) &
(as.numeric(df1$code) > as.numeric(df2$LEFT) |
as.numeric(df1$code) == as.numeric(df2$LEFT)
)
),]...........etc
答: 暂无答案
评论
dplyr
left_join(df1, df2, by = join_by(between(Code, Left, Right)), suffix = c("", ".y")) %>% mutate(Activity = if_else((is.na(Activity) | !nzchar(Activity)) & !is.na(Activity.y), Activity.y, Activity)) %>% select(-Activity.y, -Left, -Right)
data.table
sqldf
fuzzyjoin
join_by
dplyr
for