gpt4 book ai didi

R,dplyr : cumulative version of n_distinct

转载 作者:行者123 更新时间:2023-12-04 10:07:18 24 4
gpt4 key购买 nike

我有一个数据框如下。按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值,即直到 time中的每个点 grp为止。这与我使用 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))

最佳答案

假设东西已经由time排序,则首先定义一个累积的不同函数:

dist_cum <- function(var)
sapply(seq_along(var), function(x) length(unique(head(var, x))))

然后使用 ave创建组的基本解决方案(请注意,假定 var1是因素),然后将我们的函数应用于每个组:
transform(df, var2=ave(as.integer(var1), grp, FUN=dist_cum))
data.table解决方案,基本上可以完成相同的操作:
library(data.table)
(data.table(df)[, var2:=dist_cum(var1), by=grp])

同样, dplyr,也是一样:
library(dplyr)
df %>% group_by(grp) %>% mutate(var2=dist_cum(var1))

关于R,dplyr : cumulative version of n_distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com