gpt4 book ai didi

r - 在 R 中查找每个分组的新观察值

转载 作者:行者123 更新时间:2023-12-04 00:15:53 26 4
gpt4 key购买 nike

我有一个数据框:

id = c('a', 'b', 'a', 'b', 'c', 'a', 'b', 'c', 'd')
period = c(1, 1, 2, 2, 2, 3, 3, 3, 3)
a <- data.frame(period, id); a


period id
1 1 a
2 1 b
3 2 a
4 2 b
5 2 c
6 3 a
7 3 b
8 3 c
9 3 d

现在,我想在每个时期找到新的观察结果。我也是,

a_group <- a %>% group_by(period) %>% count(id_count = n())
a_news <- a_group %>% ungroup() %>%
mutate(new_vals = id_count - lag(id_count))
a_news

period id_count n new_vals
<dbl> <int> <int> <int>
1 1 2 2 NA
2 2 3 3 1
3 3 4 4 1

这很好用,因为对于每个时期都有一个新的独特观察被添加。考虑一下,当每个周期的 new id 不是唯一的时:

id1 = c('a', 'b', 'a', 'b', 'a', 'a', 'b', 'c', 'a')
period1 = c(1, 1, 2, 2, 2, 3, 3, 3, 3)
b <- data.frame(period1, id1); b

period1 id1
1 1 a
2 1 b
3 2 a
4 2 b
5 2 a
6 3 a
7 3 b
8 3 c
9 3 a
b_group <- b %>% group_by(period1) %>% count(id1_count = n())
b_news <- b_group %>% ungroup() %>%
mutate(new_vals = id1_count - lag(id1_count))

我得到与 a_news

相同的结果
   period1 id1_count     n new_vals        
1 1 2 2 NA
2 2 3 3 1
3 3 4 4 1

虽然实际上 new 观察 a 从第 2 期开始就完全不是新的了。如何找出每个时期(第 1 时期之后)的新观察次数?因为,在第一阶段当然一切都是新的。

数据帧 b 的预期输出:

period1 new_vals        
1 2
2 0
3 1

在 period1 == 2 中没有新的观察,在 period1 == 3 有一个新的观察 (c)

最佳答案

你可以尝试使用uniqueReduce:

tt <- split(a$id, a$period) #Split id per period
#Find unique id's until period
n <- lengths(Reduce(function(i,j) unique(c(i,j)), tt, accumulate = TRUE))
setNames(diff(c(0,n)), names(tt))
#1 2 3
#2 1 1

tt <- split(b$id1, b$period1)
n <- lengths(Reduce(function(i,j) unique(c(i,j)), tt, accumulate = TRUE))
setNames(diff(c(0,n)), names(tt))
#1 2 3
#2 0 1

关于r - 在 R 中查找每个分组的新观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63795467/

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