首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带LOCF的条件插补

带LOCF的条件插补
EN

Stack Overflow用户
提问于 2019-12-11 05:38:00
回答 1查看 68关注 0票数 1

我有一个纵向数据的例子。我需要根据之前发生的事情来估算0,999或-1的值。

代码语言:javascript
复制
ID = c(1,1,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6) 
Oxy = c(0, 999, 1, 999, 999, 0, 0, 999, 999, 0, 0, -1, 0, 999, 1, 1, -1, 1, 999, -1, 0, -1, 1,0, 999, 0) 
Y = c(2010,2011,2012,2013,2014,2011,2012,2013,2010,2011,2012,2010,2011,
      2012,2010,2011,2012,2013,2014,2015,2016,2017, 2018,2019,2020, 2021) 
Oxy2 = c(0, 999, 1, 1, 1, 0, 0, 999, 999, 0, 0, -1, 0, 999, 1, 1, 1, 1, 999, -1, 0, -1, 1, 1,1,1) 
df = data.frame(ID, Oxy, Y, Oxy2)

基本上,我希望从Oxy获得Oxy2。当Oxy之前的值是0或-1时,我需要保留999,考虑到组ID随着时间的推移,第一个1出现后,我需要替换其他所有内容。

代码语言:javascript
复制
ID Oxy    Y Oxy2
  1   0 2010    0
  1 999 2011  999
  1   1 2012    1
  1 999 2013    1
  1 999 2014    1
  2   0 2011    0
  2   0 2012    0
  2 999 2013  999
  3 999 2010  999
  3   0 2011    0
  3   0 2012    0
  4  -1 2010   -1
  4   0 2011    0
  4 999 2012  999
  5   1 2010    1
  5   1 2011    1
  5  -1 2012    1
  5   1 2013    1
  6 999 2014  999
  6  -1 2015   -1
  6   0 2016    0
  6  -1 2017   -1
  6   1 2018    1
  6   0 2019    1
  6 999 2020    1
  6   0 2021    1

谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 05:53:41

您可以使用cumsum(Oxy == 1) >= 1来标识前一行1之后的行:

代码语言:javascript
复制
df %>%
  group_by(ID) %>%
  mutate(OxyFilled = ifelse(cumsum(Oxy == 1) >= 1, 1, Oxy))

输出:

代码语言:javascript
复制
# A tibble: 25 x 5
# Groups:   ID [6]
      ID   Oxy     Y  Oxy2 OxyFilled
   <dbl> <dbl> <dbl> <dbl>     <dbl>
 1     1     0  2010     0         0
 2     1   999  2011   999       999
 3     1     1  2012     1         1
 4     1   999  2013     1         1
 5     1   999  2014     1         1
 6     2     0  2011     0         0
 7     2     0  2012     0         0
 8     2   999  2013   999       999
 9     3   999  2010   999       999
10     3     0  2011     0         0
# … with 15 more rows
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59275742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档