如何在前一行的基础上在下几行中插入值



我有一个类似的表

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中做到这一点。感谢

您可以在MySQL中使用相关子查询:

SELECT t.id, 
(CASE WHEN A <> '00' 
THEN A
ELSE (SELECT t1.A
FROM table t1
WHERE t1.id < t.id AND t1.A <> '00'
ORDER BY t1.id DESC
LIMIT 1
)
END) AS A, B
FROM table t;

这里有一个在R中执行此操作的一行。基本上,我们用NA替换0s,并使用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

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

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

R中,可以使用tidyr函数fill执行此操作。首先用mutate将所有0更改为NA,然后填充函数将用最后一个值替换它。

library(dplyr)
library(tidyr)
df %>% mutate(A = ifelse(A==0,NA,A)) %>% fill(A)
#  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

最新更新