【问题标题】:Replace only the last zero value with the previous value in xts data仅用 xts 数据中的前一个值替换最后一个零值
【发布时间】:2021-03-18 18:13:10
【问题描述】:

我有一个由零、1 和 -1 组成的 XTS 数据框 我想将数字之后的唯一第一个零值更改为该数字的值 例如,如果列是

0,0,0,1,1,1,**0**,0,0 

我希望它是这样的

0,0,0,1,1,1,**1**,0,0 

如果是的话

0,0,0,-1,-1,**0**,0

我希望它是

0,0,0,-1,-1,**-1**,0

提前致谢

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557(和xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。
  • 好的,谢谢告知

标签: r xts


【解决方案1】:

这是一个dplyr 方法:

library(dplyr)
dat <- tibble(
  int1 = c(0,0,0,1,1,1,0,0,0),
  int2 = c(0,0,0,-1,-1,0,0,0,0)
)

dat %>%
  mutate_at(vars(int1, int2), ~ if_else(. == 0 & lag(. != 0, default = FALSE) != 0, lag(.), .))
# # A tibble: 9 x 2
#    int1  int2
#   <dbl> <dbl>
# 1     0     0
# 2     0     0
# 3     0     0
# 4     1    -1
# 5     1    -1
# 6     1    -1
# 7     1     0
# 8     0     0
# 9     0     0

如果您需要这些作为附加列(副就地替换):

dat %>%
  mutate_at(vars(int1, int2), list(fixed = ~ if_else(. == 0 & lag(. != 0, default = FALSE) != 0, lag(.), .)))
# # A tibble: 9 x 4
#    int1  int2 int1_fixed int2_fixed
#   <dbl> <dbl>      <dbl>      <dbl>
# 1     0     0          0          0
# 2     0     0          0          0
# 3     0     0          0          0
# 4     1    -1          1         -1
# 5     1    -1          1         -1
# 6     1     0          1         -1
# 7     0     0          1          0
# 8     0     0          0          0
# 9     0     0          0          0

【讨论】:

  • 不错的解决方案,但如果我的数据是 XTS 对象怎么办
  • 我知道这就是你所说的,但你没有提供样本数据,所以我使用了我所知道的(很少)。请阅读我对dput 的第一条评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2018-01-23
  • 1970-01-01
  • 2016-03-06
相关资源
最近更新 更多