【问题标题】:Finding the difference between rows given the date and variable在给定日期和变量的情况下查找行之间的差异
【发布时间】:2013-11-19 11:23:36
【问题描述】:

美好的一天!

如果只有月份大于一个(从 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] &lt;- 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

对此有什么想法吗?

提前致谢!

【问题讨论】:

  • 嗨!你能帮我理解你想要的结果吗?我假设'Feb.08 / a'的差异是值b - 值a,即8 - 5 = 3。但是你如何计算'Feb.08 / b'的差异?抱歉,我忽略了一些非常明显的事情。干杯。

标签: r if-statement for-loop


【解决方案1】:

试试下面的代码:

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]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多