首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于群和时间的值的共现(矩阵)

基于群和时间的值的共现(矩阵)
EN

Stack Overflow用户
提问于 2015-12-08 08:00:55
回答 1查看 99关注 0票数 2

我正在寻求确定特定人员(ID)在给定年份之前的预定时间间隔内协作多少次。理想情况下,该解决方案能够提供以下三种情况:

  1. 每个人的合作总数
  2. 每个人与之合作的总人数
  3. 现有团队中重复协作的总数。

许多问题-- 1234 --都与此相关,但非使用两个不同的标准。我修改了给定here的数据示例,并通过@trinker进行了求解。

代码语言:javascript
运行
复制
dat <- read.table(text="Group ID Time
Trx1 A 1980
Trx1 B 1980
Trx1 C 1980
Trx2 E 1980
Trx2 B 1980
Trx3 B 1981
Trx3 C 1981
Trx4 C 1983
Trx4 E 1983
Trx4 B 1983
Trx5 F 1984
Trx5 B 1984
Trx5 C 1984
Trx6 A 1986", header=T) 

因此,1980年出现了两个项目:Trx1Trx2。在第一个,A,B,和C协作,在第二个,E和B做。

对于我想要的每一个IDiIDj(j <> i)的总数量是IDi在重点项目之前的z(比方说3年)内与之协作的。另外,我想要不同合作者的数量(例如,A和B在3年间隔内的2次协作只计算为1)。最后,我需要这些重复的领带。对于简约,所有的零值都可以被排除。我的真实数据有40,000多个ID,90,000多个项目,超过50年。结果应该是这样:

代码语言:javascript
运行
复制
ID  year total diff repeat
B   1981    3   3   1
C   1981    2   2   1
B   1983    4   3   3 *
C   1983    3   2   2
E   1983    1   1   1
B   1984    3   2   2
C   1984    3   2   2 **

解释:

  • 1983年以前,B与C协作两次,一次与A协作,一次与E协作(列总计= 4)。在第四列(diff = 3)中,只有一次与C的协作。在上一篇专栏文章中,我计算了与当前团队成员重复协作的次数。B在Trx1和Trx3与C一起工作,在Trx2与E一起工作,因此重复=3

** C在1981至1983年间(不包括,1980年)与3人合作。2与B (Trx3,Trx4)协作,1与E (Trx4)协作,总计= 3,diff =2。在当前团队成员(B和F)中,C与F有0的优先协作,在3年窗口中有2与B的协作(重复= 2)。

这个问题和我问here的另一个问题差不多,但我希望这里更清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 12:43:07

给你:

代码语言:javascript
运行
复制
library(data.table)
library(magrittr)
options(stringsAsFactors = F)

dat <- read.table(text="Group ID Time
Trx1 A 1980
Trx1 B 1980
Trx1 C 1980
Trx2 E 1980
Trx2 B 1980
Trx3 B 1981
Trx3 C 1981
Trx4 C 1983
Trx4 E 1983
Trx4 B 1983
Trx5 F 1984
Trx5 B 1984
Trx5 C 1984
Trx6 A 1986", header=T) 

str(dat)
dat = as.data.table(dat)

priorYears = 3
unqIDs = unique(dat$ID)


results = data.table(ID = character(), year = numeric(), total = numeric(), diff = numeric(), repeatSum = numeric())

for(i in 1:nrow(dat)){

  endYear = dat$Time[i] 
  startYear = endYear - priorYears
  this.ID = dat$ID[i]
  this.group = dat$Group[i]

  #Dates filtering
  subset.DT = dat[dat$Time >= startYear & dat$Time < endYear] 

  # Keep projects where my current ID collaborated 
  groupsToKeep = subset.DT$Group[subset.DT$ID == this.ID] %>% unique
  subset.DT = subset.DT[subset.DT$Group %in% groupsToKeep,]


  # Calculations
  unqMembers = unique(subset.DT$ID) %>% .[. != this.ID]
  currentMembers = dat$ID[dat$Group == this.group] %>% .[. != this.ID]

  total = length(which(subset.DT$ID != this.ID))
  diff = length(unqMembers)
  repeatSum = sum(table(subset.DT$ID)[currentMembers], na.rm = T)

  # Add results
  results = rbind(results, data.frame(ID = this.ID, year = endYear, total, diff, repeatSum))

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

https://stackoverflow.com/questions/34150763

复制
相关文章

相似问题

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