找到给定日期和变量的行之间的差异

时间:2013-11-19 11:23:37

标签: r if-statement for-loop

美好的一天!

我需要找到两个日期之间特定系列的差异,如果只有月份大于1(从2月到12月)。

假设我有一张桌子

  Date / variable / value
  Jan.08 / a / 2
  Jan.08 /b / 3
  Feb.08 / a / 5
  Feb.08 / b / 8

我需要以下结果

  Date / variable / value / diff
  Jan.08 / a / 2 / 2
  Jan.08 /b / 3 / 3
  Feb.08 / a / 5 / 3
  Feb.08 / b / 8 / 5

我使用了这个功能

for (i in 1:nrow(df_tests)) {
  if (format(df_tests$Date, "%m")!="01") {
    df_tests[,4] <- ave(df_tests$value, df_tests$variable, FUN=function(x) c(NA, diff(x)))
  } else {
    df_tests[,4] <- df_tests$value
  }
}

但它只是声明的第二部分 df_tests[,4] <- df_tests$value 我得到了这个结果

  Date / variable / value / diff
  Jan.08 / a / 2 / 2
  Jan.08 /b / 3 / 3
  Feb.08 / a / 5 / 5
  Feb.08 / b / 8 / 8

对此有何看法?

提前致谢!

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

for (i in 1:nrow(df_tests)) {
  if (format(as.Date(paste("01.", df.tests$Date[i], sep = ""), format = "%d.%b.%y"), "%m")=="01") {
    df_tests[i,4] <- ave(df_tests$value, df_tests$variable, FUN=function(x) c(NA, diff(x)))[i]
  } else {
    df_tests[i,4] <- df_tests$value[i]
  }
}