首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按组计算的数据

按组计算的数据
EN

Stack Overflow用户
提问于 2022-05-12 16:23:52
回答 1查看 48关注 0票数 0

我有如下所示的数据(真实的数据有更多的人和俱乐部):

代码语言:javascript
复制
Year   Player    Club
2005   Phelan    Chicago Fire 
2007   Phelan    Boston Pant
2008   Phelan    Boston Pant
2010   Phelan    Chicago Fire  

2002   John      New York Jet
2006   John      New York Jet
2007   John      Atlanta Elephant
2009   John      Chicago Fire

我想为每个俱乐部计算一个俱乐部水平度量(previous_exp)。俱乐部是通过球员的流动而联系在一起的。"previous_exp“捕获了每个俱乐部的俱乐部级流入源。

例如,在芝加哥消防队,费兰在2005年来到这个俱乐部,然后离开了。他在2010年回来了。在费兰第一次留在芝加哥消防队之前,他没有任何经验(所以我们忽略了这一点)。然而,在他第二次留在芝加哥消防,他有5年的经验(2005-2009)在两个不同的俱乐部(芝加哥消防和波士顿潘特)。对于约翰来说,在他来到芝加哥消防之前,他有7年的经验(纽约喷气机和亚特兰大大象)。

对于芝加哥火,根据菲兰和约翰的职业记录,它总共积累了0+5+7=12年的经验,从其他俱乐部。在这12年中,2年来自芝加哥消防公司(假设2006年菲兰留在芝加哥消防公司)、3年来自波士顿彭特(假设2009年帕兰在波士顿潘特)、5年来自纽约喷气机(约翰2002-2006年)和2年来自亚特兰大大象(约翰2007-2008年)。

最后,我可以用公式计算芝加哥火灾的"previous_exp“:(经验长度1/年)^2+(经验长度2/年)^2+.,它等于(2/12)^2+(3/12)^2+(5/12)^2+(2/12)^2=0.292。我想为所有的俱乐部计算这个指标。下面是一个样本产出(注意到纽约喷气机是NA的,因为以前没有与纽约航空公司有关联的经验):

代码语言:javascript
复制
Club               previous_exp
Chicago Fire       0.292
Boston Pant        1
New York Jet       NA
Atlanta Elephant   1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-17 13:47:15

因为单个先前停留的长度很重要,而且由于这些时间的积累,我们可以创建一个辅助函数来跟踪它们。

代码语言:javascript
复制
library(tidyverse)

df <- tribble(~Year,   ~Player,    ~Club,
              2005,   "Phelan",    "Chicago Fire",
              2007,   "Phelan",    "Boston Pant",
              2008,   "Phelan",    "Boston Pant",
              2010,   "Phelan",    "Chicago Fire",
              2002,   "John",      "New York Jet",
              2006,   "John",      "New York Jet",
              2007,   "John",      "Atlanta Elephant",
              2009,   "John",      "Chicago Fire") %>% 
    mutate(Year = as.integer(Year))

helper <- function(vec){
    n <- length(vec)
    output <- vector("list", n)
    for(i in 1:n){
        output[[i]] <- vec[1:i]
    }
    output
}


df %>% 
    group_by(Player) %>% 
    arrange(Year, .by_group = TRUE) %>% 
    filter(Club != lag(Club, default = "")) %>% # Must remove Phelan's second Boston Pant stay
    mutate(experience_this_row = Year - lag(Year)) %>% 
    na.omit() %>% 
    mutate(experience_list = helper(experience_this_row)) %>% 
    group_by(Club) %>% 
    summarize(previous_exp = unlist(list(experience_list))) %>% 
    summarize(previous_exp = sum( (previous_exp/sum(previous_exp))^2))

Club的总结可能会有一种更顺畅的方法。上面的内容对我有用,但我对连续的summarize调用感到有点困惑.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72219105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档