【问题标题】:Create conditional sum score in new column R在新列 R 中创建条件总分
【发布时间】:2022-09-23 23:32:42
【问题描述】:

编辑:我在示例数据中添加了另一列day,因为beep 嵌套在day 中。

我有以下数据。我试图通过beepdayidbeep = 3 的行中获得a 的总和。请参阅专栏b 了解我想要实现的目标。我已经尝试使用dyplrgroup_by,但到目前为止还没有成功。任何关于如何解决这个问题的想法都非常感谢!

注:实际数据包含beep中缺失(略过)

structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L), date = c(\"1-1-2022\", \"1-1-2022\", \"1-1-2022\", \"2-1-2022\", 
\"2-1-2022\", \"2-1-2022\", \"1-1-2022\", \"1-1-2022\", \"1-1-2022\", \"2-1-2022\", 
\"2-1-2022\", \"2-1-2022\"), beep = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L), a = c(1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 
1L, 1L, 0L), b = c(NA, NA, 2L, NA, NA, 1L, NA, NA, 1L, NA, NA, 
2L)), class = \"data.frame\", row.names = c(NA, -12L))
id day beep a b
1 1-1-22 1 1 NA
1 1-1-22 2 0 NA
1 1-1-22 3 1 2
1 2-1-22 1 1 NA
1 2-1-22 2 0 NA
1 2-1-22 3 0 1
2 1-1-22 1 1 NA
2 1-1-22 2 0 NA
2 1-1-22 3 0 1
2 2-1-22 1 1 NA
2 2-1-22 2 1 NA
2 2-1-22 3 0 2
  • 对不起,您能否详细解释一下b背后的操作?
  • badayid 分组的总和。我需要beep = 3 行中的总分。

标签: r dplyr


【解决方案1】:

这会重现您的 b 列。

library(zoo)
data %>%
    mutate(b_new = rollapply(a, width = 3, sum, by = 3, fill = NA, align = "right"))
#   id beep a  b b_new
#1   1    1 1 NA    NA
#2   1    2 0 NA    NA
#3   1    3 1  2     2
#4   1    1 1 NA    NA
#5   1    2 0 NA    NA
#6   1    3 0  1     1
#7   2    1 1 NA    NA
#8   2    2 0 NA    NA
#9   2    3 0  1     1
#10  2    1 1 NA    NA
#11  2    2 1 NA    NA
#12  2    3 0  2     2

注意:这是基于以下关键假设:你总是有 beep = 1, 2, 3 重复(即没有丢失beep 值,没有重复的beep 值)。在这种情况下,您不需要任何分组,可以使用滚动窗口方法,计算每 3 个值的总和,步长为 3。

从您的样本数据中很难看出这对您的实际数据的概括程度。

【讨论】:

  • 谢谢!这对我不起作用,因为确实,beep 中有缺失(哔声 = 1,3,或哔声 = 1,2 在这种情况下,我不需要总和值,因为我只需要在哔声时使用它= 3 存在)。这就是我尝试使用分组的原因。
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
相关资源
最近更新 更多