我正在使用在某些项目上合作的大型员工数据集。数据结构如下(抱歉标题!):
Project Person_i Person_j Year Hours_ij
101 ID1 ID4 2009 20
101 ID2 ID5 2009 30
101 ID3 ID6 2009 40
102 ID1 ID4 2010 20
102 ID2 ID5 2010 30
102 ID3 ID6 2010 40
103 ID1 ID4 2011 20
103 ID2 ID5 2011 30
103 ID3 ID6 2011 40
104 ID1 ID4 2012 20
104 ID2 ID5 2012 30
104 ID3 ID6 2012 40
我想计算两个人(即“Person_i”和“Person_j”的独特组合)在之前的项目中合作的小时数。以下是所需数据的示例。这里,变量“Prior_hours”是变量“Year”的先前观察中“Hours_ij”的总和:
Project Person_i Person_j Year Hours_ij Prior_hours
101 ID1 ID4 2009 20 0
101 ID2 ID5 2009 30 0
101 ID3 ID6 2009 40 0
102 ID1 ID4 2010 20 20
102 ID2 ID5 2010 30 30
102 ID3 ID6 2010 40 40
103 ID1 ID4 2011 20 40
103 ID2 ID5 2011 30 60
103 ID3 ID6 2011 40 80
104 ID1 ID4 2012 20 60
104 ID2 ID5 2012 30 90
104 ID3 ID6 2012 40 120
我曾尝试拆分和聚合文件(带子集),但我无法解决这个问题。非常感谢您的时间和帮助!
答案 0 :(得分:2)
这适用于您的示例:
df <- read.table(text="Project Person_i Person_j Year Hours_ij
101 ID1 ID4 2009 20
101 ID2 ID5 2009 30
101 ID3 ID6 2009 40
102 ID1 ID4 2010 20
102 ID2 ID5 2010 30
102 ID3 ID6 2010 40
103 ID1 ID4 2011 20
103 ID2 ID5 2011 30
103 ID3 ID6 2011 40
104 ID1 ID4 2012 20
104 ID2 ID5 2012 30
104 ID3 ID6 2012 40", sep=" ", header=T)
df$Prior_hours <- unsplit(
tapply(df$Hours_ij,
paste(df$Person_i, df$Person_j),
function(x) c(0,cumsum(x[1:length(x)-1]))),
paste(df$Person_i, df$Person_j))
df
Project Person_i Person_j Year Hours_ij Prior_hours
1 101 ID1 ID4 2009 20 0
2 101 ID2 ID5 2009 30 0
3 101 ID3 ID6 2009 40 0
4 102 ID1 ID4 2010 20 20
5 102 ID2 ID5 2010 30 30
6 102 ID3 ID6 2010 40 40
7 103 ID1 ID4 2011 20 40
8 103 ID2 ID5 2011 30 60
9 103 ID3 ID6 2011 40 80
10 104 ID1 ID4 2012 20 60
11 104 ID2 ID5 2012 30 90
12 104 ID3 ID6 2012 40 120