如何在r中使用嵌套for循环

时间:2017-12-22 06:09:44

标签: r

我有两个数据框,约会和交易。 此处图表编号与两个数据框中的变量匹配。

我需要在约会表中选择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 
}

enter image description here

约会表:

图表编号日期 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

1 个答案:

答案 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)

我没有测试这个例子,因为没有提供数据。但我想你会对如何解决这个问题有所了解。

我希望我能正确理解你的问题。