r中的聚合和子集-计算参与者在过去一起工作的小时数
我正在使用一个大型的员工数据集,这些员工在某些项目上进行过合作。数据的结构如下所示(对不起,标题有问题!) 我想计算两个人(即“Person_I”和“Person_j”的独特组合)在以前的项目中合作的小时数。下面是所需数据的示例。在此,变量“前几小时”是变量“年”之前观测值中“小时数”的总和:r中的聚合和子集-计算参与者在过去一起工作的小时数,r,R,我正在使用一个大型的员工数据集,这些员工在某些项目上进行过合作。数据的结构如下所示(对不起,标题有问题!) 我想计算两个人(即“Person_I”和“Person_j”的独特组合)在以前的项目中合作的小时数。下面是所需数据的示例。在此,变量“前几小时”是变量“年”之前观测值中“小时数”的总和: 我曾尝试拆分和聚合文件(使用子集),但我就是搞不懂这一点。非常感谢您的时间和帮助 这适用于您的示例: df <- read.table(text="Project Person_i Person_j
我曾尝试拆分和聚合文件(使用子集),但我就是搞不懂这一点。非常感谢您的时间和帮助 这适用于您的示例:
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
df这适用于您的示例:
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
df
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