我有两个数据框,约会和交易。 此处图表编号与两个数据框中的变量匹配。
我需要在约会表中选择first row
并获取图表编号和约会日期,然后将此图表编号与交易表相匹配并获取所有交易详情。
获取所有交易详细信息后,将约会日期与所有交易日期进行比较,如果在15
天内发生任何交易,则返回1
,否则将在约会表中返回0
该特定图表编号。
如何在此方案中使用嵌套for循环或任何其他函数?
我使用了以下代码
for(i in 1:nrow(a))
{
appt <- a
chart_number <- a[i, "Chart Number"]
appointmentdate <- a[i, "Date"]
trns <- subset(t, "Chart Number" == chart_number)
trns1 <- trns["Date"]
out <- subset(trns1, as.Date(trns1$Date) >= as.Date(appointmentdate) &
as.Date(trns1$Date) <= as.Date(appointmentdate) + days(15))
if(nrow(out) > 0)
{
appt$trns <- 1
} else
appt$trns <- 0
}
约会表:
图表编号日期 1234dt 26/05/2015 001imp 28/06/2015 Ranj001 03/08/2015 Hath004 06/10/2015
交易表
图表编号日期 1234dt 26/05/2015 1234dt 7/06/2015 1234dt 24/08/2015 001imp 15/07/2015 001imp 5/09/2015 Ranj001 4/08/2015 Ranj001 29/08/2015
答案 0 :(得分:0)
首先转换&#39;日期&#39;到日期格式:
a$Date <- as.Date(a$Date, '%d-%m-%Y')
t$Date <- as.Date(t$Date, '%d-%m-%Y')
接下来使用dplyr在图表编号上进行内连接
library(dplyr)
joined_table <- inner_join(x=a, y=t, by= c('Chart Number' = 'Chart.Number'))
接下来减去两个日期并测试差异是否<15并创建一个新列Paid。
transform(joined_table , Paid = ifelse(Date.y - Date.x <= 15, 1, 0)
我没有测试这个例子,因为没有提供数据。但我想你会对如何解决这个问题有所了解。
我希望我能正确理解你的问题。