首页 > 解决方案 > 如何根据前一行在接下来的几行中插入值

问题描述

我有一张这样的桌子

  Id   A    B     
  1  11   event1  
  2  12   event2   
  3  00   event1
  4  00   event2
  5  11   event1
  6  00   event2
  7  00   event3
  8  13   event1

我想从以前的值更改 00 。输出将如下所示

  Id  A   B 
  1  11   event1
  2  12   event2
  3  12   event1
  4  12   event2
  5  11   event1
  6  11   event2
  7  11   event3
  8  13   event1

有没有办法在 R 或 MySQL 中做到这一点。谢谢

标签: mysqlsqlr

解决方案


这是在 R 中执行此操作的单行代码。基本上,我们将 0 替换为NA并使用zoo::na.locf()最后一个非 NA 值填充,即

transform(d1, A = zoo::na.locf(replace(A, A == 0, NA)))

这使,

  Id  A      B
1  1 11 event1
2  2 12 event2
3  3 12 event1
4  4 12 event2
5  5 11 event1
6  6 11 event2
7  7 11 event3
8  8 13 event1

作为@G。Grothendieck 指出,您的A变量似乎是一个字符。如果是这样的话,

transform(d1, A = na.locf0(replace(A, A == "00", NA)))

推荐阅读