首页 > 解决方案 > 如果先验值 > 值,则用向量中的先验值替换值

问题描述

我对 R 很陌生,无法解决以下问题:在我的数据帧 df 中,如果向量中的值低于前一行中的值,我需要将向量中的值替换为同一向量中的先前值。它需要按ID分组。

示例 DF 如下所示:

ID x
1 2
1 2
1 4
1 2
1 1
2 不适用
2 4
2 2

我希望它看起来像这样:

ID x
1 2
1 2
1 4
1 4
1 4
2 不适用
2 4
2 4

我尝试了以下代码:

df <- df %>%
  group_by(ID) %>%
  mutate(x= replace(x, x< lag(x), lag(x)))`

但我得到这个错误:

mutate_impl(.data, dots) 中的错误:评估错误:下标分配中不允许使用 NA。

我该如何解决这个问题(最好用dplyr)?

标签: rreplacedplyrlag

解决方案


我会尝试:

df <- df %>%
  filter(!is.na(x))  %>%
  mutate(x= if_else(x< lag(x), lag(x), x))

希望对你有用!


推荐阅读