0

我试图通过两组(ID和循环分类变量“current.group”)来估算数值变量“x.val”的LOCF,但我想让这些组在它们被不同组的行分隔的地方不同)

data.frame(ID = c("1001", "1001", "1001", "1001", "1001", "1001", "1001", "1002", "1002", "1002", "1002", "1002", "1002", "1002"), 
current.group = c("a", "a", "b", "a", "b", "b", "c", "a", "a", "a", "a", "a", "a", "c"), 
x.val = c(433, NA, NA, 362, NA, NA, 125, 158, NA, NA, NA, 111, NA, 101))

我想要实现的是仅对当前组进行插补,主题 1001 的第 4 个位置与第 1 行和第 2 行的分组“a”相同,但是一个新的循环,所以我希望将其分离为一个不同的组从第 1 行和第 2 行开始。结果应该是:

1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002, 1002, 1002
a, a, b, a, b, b, c, a, a, a, a, a, a, c
433, 433, NA, 362, NA, NA, 125, 158, 158, 158, 158, 111, 111, 101

但是,如果我使用 group_by 函数,它将只获取整个数据帧中“current.group”的所有实例(按 ID 分组)。我倾向于认为有一种方法可以创建一个派生变量,该变量在这个新变量上指示这些不同的组和 group_by。但是,我想知道 dplyr 中是否有不同的方法或使用其他方法

这很难解释我的意思所以我希望我想要一个 group_by 但区分由不同组的行分隔的实例

4

1 回答 1

0

您可以从循环分组中创建非循环组。只是在 group_by 这个新分组之后。

df$non.cyclic.groups <- cumsum(c(0,diff(as.numeric(factor(df$current.group))))!=0)

     ID current.group x.val non.cyclic.groups
1  1001             a   433                 0
2  1001             a    NA                 0
3  1001             b    NA                 1
4  1001             a   362                 2
5  1001             b    NA                 3
6  1001             b    NA                 3
7  1001             c   125                 4
8  1002             a   158                 5
9  1002             a    NA                 5
10 1002             a    NA                 5
11 1002             a    NA                 5
12 1002             a   111                 5
13 1002             a    NA                 5
14 1002             c   101                 6
于 2020-07-13T17:10:28.677 回答