r - 对应于另一个数据框的下一个可用日期的排名
问题描述
有人可以帮我满足以下要求吗?
DF1:
Item Day Rank
A 2020-01-12
A 2020-01-13
B 2020-01-13
DF2:
Item Day Rank
A 2020-01-10 1
A 2020-01-11 2
A 2020-01-14 3
B 2020-01-14 4
B 2020-01-17 5
如果我们在 DF1 中有 DF2 中不存在的 Day,那么我想从与 DF2 中的日期对应的下一个日期获取 DF1 日期的排名。在这里,DF1 中的 2020-01-12 没有任何排名,因此它应该从 DF2 搜索下一个日期,即 2020-01-13 并且相应的排名应该作为输出。
最终输出(DF1):
Item Day Rank
A 2020-01-12 3
A 2020-01-13 3
B 2020-01-13 4
解决方案
这是一个基本的 R 解决方案(假设您的列Day
在两者中DF1
并且DF2
已经属于类Date
)
DF1 <- do.call(rbind,
c(make.row.names = F,
lapply(split(DF1,DF1$Item), function(v) {
z <- subset(DF2,Item == unique(v$Item))
v <- within(v, Rank <- findInterval(Day, z$Day)+ min(z$Rank))
}
)
)
)
这样
> DF1
Item Day Rank
1 A 2020-01-12 3
2 A 2020-01-13 3
3 B 2020-01-13 4
数据
DF1 <- structure(list(Item = c("A", "A", "B"), Day = structure(c(18273,
18274, 18274), class = "Date"), Rank = c(NA, NA, NA)), row.names = c(NA,
-3L), class = "data.frame")
DF2 <- structure(list(Item = c("A", "A", "A", "B", "B"), Day = structure(c(18271,
18272, 18275, 18275, 18278), class = "Date"), Rank = 1:5), row.names = c(NA,
-5L), class = "data.frame")
推荐阅读
- c# - 如何在新的 Unity 输入系统 1.0.0 下处理多个键输入
- python - 在 codechef (The Lead Game) 中得到错误答案
- php - 从 URL 获取 Youtube ID 仅在使用 ?variable=URL 而不是 /URL 时有效
- ansible - 在 ansible playbook 中解压 yaml 值
- angular - 为特定项目动态加载翻译文件
- html - 如何使用 BaseX 提供静态的 hello world 类型的 HTML 文档?
- python - 在具有不同允许域的 Scrapy Crawlspider 中添加多个起始 URL 的最佳方法是什么?
- node.js - 防止图像加载的内容安全策略
- javascript - 分享不带空格的链接 JavaScript
- git - 远程:在 mac 终端中找不到存储库错误