【问题标题】:replace value with prior value in a vector if prior value > value如果先验值 > 值,则用向量中的先验值替换值
【发布时间】:2019-04-05 14:15:32
【问题描述】:

我对 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)?

【问题讨论】:

  • 你可以看看?cummax
  • 实际上,如果我想排除 NA,这很有效。还没有发现我如何能够保持 NA 值,但无论如何这并不太公平。非常感谢!

标签: r replace dplyr lag


【解决方案1】:

我会尝试:

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

希望对你有用!

【讨论】:

    猜你喜欢
    • 2023-01-02
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多