r - 根据来自另一个数据帧的两个条件过滤一个数据帧
问题描述
我有两个数据框,第一个有 3 万行,第二个有 571 行。
我需要用第二个的 2 个标准过滤第一个。
标准 A: (fctr) DF1$Col1 == [i]DF2$Col1
标准 B:(日期)DF1$Col2 <= [i]DF2$Col2
df1 = data.frame(col1 = c("a","a","a","b","b","b","b","c","c"), col2 = c("10/02", "15/02", "14/03", "05/03", "07/03", "15/03", "20/03", "12/03", "15/03"))
df2 = data.frame(col1 = c("a","b","c"), col2 = c("15/02", "15/03", "15/03"))
我需要这样的东西:
dataframe3 = filter(df1, col1 == [i]df2$col1 & col2 <= [i]df2$col2)
#or
for(i in df2$col1){
a=filter(df1, col1 ==i)
for(e in df2$col2){ #here is the problem, i don't want loop in all dates
b[]=filter(a, col2 <=e)}
解决方案
如果我理解正确,这应该可以满足您的要求:
# Add year to make the columns readable as dates
df1$col2 <- as.Date(paste0(df1$col2, "/2019"), format = "%d/%m/%Y")
df2$col2 <- as.Date(paste0(df2$col2, "/2019"), format = "%d/%m/%Y")
# Create df3 such that col1 mathces both dataframes
df3 <- merge(df1, df2, by = "col1", all.y = TRUE)
# Keep rows where df1$col2 <= df2$col2
df3 <- df3[df3$col2.x <= df3$col2.y, c("col1", "col2.x")]
# Rename columns
setnames(df3, "col2.x", "col2")
推荐阅读
- node.js - node.js+mongodb 无法链接数据库(控制台出错)
- r - 填充 R 数据框中的缺失值而不丢失行名和列名?
- c++ - 为什么我不能插入一个指向多重集的 const 指针?
- java - AndroidManifest.xml 中的包“com.class.xxx.test”不是有效的 Java 包名称,因为“类”是 Java 关键字
- sql - 使用不同的表更新表
- javascript - 如何将递归回调函数转换为异步等待格式
- php - 如何让我的会话 ID 正常工作
- vb.net - ClickOnce 默认安装路径
- android - 在 java 中的 openalpr 库中出现错误
- python - 无法在python的打字函数中传递变量