gpt4 book ai didi

r - 随着时间的推移(日期列)计算基于组的分类变量

转载 作者:行者123 更新时间:2023-12-05 04:19:17 25 4
gpt4 key购买 nike

假设我有以下 data :

<表类="s-表"><头><日>日期 名字角色名<正文>2009-12-01约翰 helper 2010-12-01约翰 helper 2011-12-01约翰高级 helper 2012-12-01约翰经理2009-12-01将 helper 2010-12-01将高级 helper 2011-12-01将经理2012-12-01将高级经理

我正在尝试根据 rolename 列计算角色的数量对于 name 中的人列,此人迄今为止工作过。例如,对于上述数据,我想要第四列来衡量一个人到目前为止工作的职位数量:

<表类="s-表"><头><日>日期 名字角色名没有立场<正文>2009-12-01约翰 helper 12010-12-01约翰 helper 12011-12-01约翰高级 helper 22012-12-01约翰经理32009-12-01将 helper 12010-12-01将高级 helper 22011-12-01将经理32012-12-01将高级经理4

我失败的尝试:

#attempt 1
library(dplyr)

data %>%
group_by(name) %>%
mutate(nopositions = count(rolename))

#attempt2
library(runner)

data %>%
group_by(name) %>%
mutate(nopositions = runner(x = rolename,
k = inf,
idx = date,
f = function(x) length(x))

最佳答案

假设 date 的订单是确定的,

library(dplyr)
quux %>%
group_by(name) %>%
mutate(noposition = cummax(match(rolename, unique(rolename)))) %>%
ungroup()
# # A tibble: 8 × 4
# date name rolename noposition
# <chr> <chr> <chr> <int>
# 1 2009-12-01 John helper 1
# 2 2010-12-01 John helper 1
# 3 2011-12-01 John senior helper 2
# 4 2012-12-01 John manager 3
# 5 2009-12-01 Will helper 1
# 6 2010-12-01 Will senior helper 2
# 7 2011-12-01 Will manager 3
# 8 2012-12-01 Will senior manager 4

如果没有 cummax,我们可能会逃脱,除非 name 返回到之前的 rolename,它的 noposition减少(恢复到以前的值)。但是,我们希望保留最近的最大值。

这确实假设 unique 保留了第一次出现的自然顺序。如果这有什么不对劲(我想不出什么东西),我们可以做一个词窗口:

quux %>%
group_by(name) %>%
mutate(noposition = sapply(seq_along(rolename), \(i) length(unique(rolename[1:i])))) %>%
ungroup()
# # A tibble: 8 × 4
# date name rolename noposition
# <chr> <chr> <chr> <int>
# 1 2009-12-01 John helper 1
# 2 2010-12-01 John helper 1
# 3 2011-12-01 John senior helper 2
# 4 2012-12-01 John manager 3
# 5 2009-12-01 Will helper 1
# 6 2010-12-01 Will senior helper 2
# 7 2011-12-01 Will manager 3
# 8 2012-12-01 Will senior manager 4

这在这里会产生相同的结果,并且它在更大的组中往往会表现得更差(因为它迭代得更多)。我将其作为扩展提供,以防假设排除使用 cummax(match(..))

关于r - 随着时间的推移(日期列)计算基于组的分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74858383/

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