【问题标题】:Fill rows upwards +1 and downwards -1 by group [duplicate]按组向上+1和向下-1填充行[重复]
【发布时间】:2022-08-16 02:58:37
【问题描述】:

以下示例数据,两组 1 和 2:

id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2)
var <- c(NA, NA, 0, NA, NA, NA, NA, NA, 20, NA, NA)
df <- data.frame(id, var)

> df
   id var
1   1  NA
2   1  NA
3   1   0
4   1  NA
5   1  NA
6   2  NA
7   2  NA
8   2  NA
9   2  20
10  2  NA
11  2  NA

如何使用变量“var”的+1和-1逐步按组向上和向下填充NA?创建一个新变量“sol”,结果应该是:

   id var sol
1   1  NA  -1
2   1  NA  -2
3   1   0   0
4   1  NA   1
5   1  NA   2
6   2  NA  17
7   2  NA  18
8   2  NA  19
9   2  20  20
10  2  NA  21
11  2  NA  22

注意:变量 \"var\" 中的值可能会有所不同,它们并非对每个组都相同。

我很感激任何帮助。特别是使用 dplyr。

  • 乍一看,这个问题是相似的。但是有一个重要的区别:在我的案例中要填充的列不仅包含零。这使得另一个问题中显示的解决方案不能直接转移。

标签: r dplyr


【解决方案1】:

使用max + which.max + row_number()

df %>% 
  group_by(id) %>% 
  mutate(sol = max(var, na.rm = T) - which.max(var) + row_number())

输出

      id   var   sol
 1     1    NA    -2
 2     1    NA    -1
 3     1     0     0
 4     1    NA     1
 5     1    NA     2
 6     2    NA    17
 7     2    NA    18
 8     2    NA    19
 9     2    20    20
10     2    NA    21
11     2    NA    22

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多