【发布时间】:2014-10-22 13:40:13
【问题描述】:
我有一个如下的数据框。它按列time 排序。
输入 -
df = data.frame(time = 1:20,
grp = sort(rep(1:5,4)),
var1 = rep(c('A','B'),10)
)
head(df,10)
time grp var1
1 1 1 A
2 2 1 B
3 3 1 A
4 4 1 B
5 5 2 A
6 6 2 B
7 7 2 A
8 8 2 B
9 9 3 A
10 10 3 B
我想创建另一个变量 var2,它计算到目前为止没有不同的 var1 值,即 直到每个组 grp 中的 time 中的那个点。这与我使用 n_distinct 时得到的有点不同。
预期输出 -
time grp var1 var2
1 1 1 A 1
2 2 1 B 2
3 3 1 A 2
4 4 1 B 2
5 5 2 A 1
6 6 2 B 2
7 7 2 A 2
8 8 2 B 2
9 9 3 A 1
10 10 3 B 2
我想为此创建一个函数 cum_n_distinct 并将其用作 -
d_out = df %>%
arrange(time) %>%
group_by(grp) %>%
mutate(var2 = cum_n_distinct(var1))
【问题讨论】: