我有两个数据帧,第一个有3万行,第二个571。
我需要用第二个条件过滤第一个条件。
条件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)}
答案 0 :(得分:0)
如果我理解正确,这应该可以满足您的需求:
# 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")