我有一个 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/