r - 最后一次值变化

标签 r xts

我有一个 xts 对象:

df <- structure(c(0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 
  0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L),
  .Dim = c(10L, 3L), .Dimnames = list(NULL, NULL),
  index = structure(c(790387200, 790473600, 790560000, 790819200, 790905600,
  790992000, 791078400, 791164800, 791424000, 791510400), tzone = "UTC",
  tclass = "Date"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC",
  tzone = "UTC", class = c("xts", "zoo"))
df
#            [,1] [,2] [,3]
# 1995-01-18    0    1    1
# 1995-01-19    0    1    1
# 1995-01-20    1    1    1
# 1995-01-23    1    0    1
# 1995-01-24    1    1    1
# 1995-01-25    0    1    1
# 1995-01-26    0    1    0
# 1995-01-27    0    1    1
# 1995-01-30    0    1    1
# 1995-01-31    0    0    1

设 1 等于 TRUE,0 等于 FALSE。虽然这只是数据的一小部分,但我想找到 0 变为 1 时的最新(最后)事件。所以对于第一列,这发生在 1995-1-20,第二列发生在 1995-01-24 , 和 1995-01-27 中的第三列。

我试过了

max.col(t(df),"last")

但这会返回最近出现的 1。

实现此目标的最佳方法是什么?

最佳答案

您可以扩展您的max.col 想法以包含diff:

max.col(t(sapply(df[,-1], diff)), "last") + 1

上面假设一个第一列是日期的data.frame。对于 xts 对象(行名称中包含日期),执行:

max.col(t(diff(df)[-1]), "last") + 1

编辑 更正@G.Grothendieck 指出的问题:

df.diff = t(diff(df)[-1])
max.col(df.diff, "last") + 1 + (rowSums(df.diff > 0) == 0)
# or put an ifelse instead and assign NA or 0 or whatever you like

关于r - 最后一次值变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573131/

相关文章:

r - 重叠和子集化列

r - 如何对多列进行累积逻辑运算

r - 在特定命名空间中定义函数

r - (函数(el,elname): "plot.title.position" is not a valid theme element name 中出现错误

r - Knit 无法编译 PDF : "Error in tools::file_path_as_absolute(output_file)"

html - 使用浏览器打开 .html(= .Rmd 输出)时,Leaflet Layer Tiles 不可切换

r - 打印数据帧列表中的第 N 行

r - 如何找到股票盘中高点和低点之间耗时?

r - 更改 XTS 对象的时区

R 将每日数据与刻度数据合并