【问题标题】:Overwrite previous values with last one given some group [duplicate]给定某个组,用最后一个值覆盖以前的值[重复]
【发布时间】:2020-11-17 05:39:40
【问题描述】:

我已经转置并填充了一个数据框,现在看起来像这样:

现在我正在尝试通过同时按 ID 和日期对它们进行分组来向上覆盖 Signal1 和 Signal 2 列中的所有值。前面的所有行都应该由给定组的最后一个值填充。输出应如下所示:

我尝试使用 dplyr 解决问题,但不知道如何处理:

df %>% group_by(ID, Date) %>% mutate (...)

必须对更多列(信号 1 - 信号 30)执行此操作,因此希望有一个通用的解决方案。

【问题讨论】:

  • 请提供您的示例数据,并在您的数据上使用dput 并将生成的文本/代码复制到您的问题中,不要使用图像来显示数据
  • 也许这行得通? df_new <- df %>% group_by(ID, Date) %>% arrange(Date) %>% mutate(across(starts_with("Signal"), last()))
  • @starja last() 有什么意义你能解释一下吗?
  • @linkonabe 我在那里犯了一个错误,它应该只是lastlast 返回每​​列的最后一个值(考虑分组变量),因为@Pavel Kaloferov 想用最后一个值替换组/信号列中的所有值

标签: r dplyr populate


【解决方案1】:

应该这样做 -

df %>%
  group_by(ID, Date) %>%
  mutate(
    Signal1 = last(Signal1),
    Signal2 = last(Signal2)
  ) %>%
  ungroup()

编辑:没有看到问题的最后一部分。 @starja 对钱的评论是正确的;应用于许多列使用 -

df %>%
  group_by(ID, Date) %>%
  mutate(across(starts_with("Signal"), last)) %>%
  ungroup()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 2013-10-03
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多