Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r中的聚合和子集-计算参与者在过去一起工作的小时数_R - Fatal编程技术网

r中的聚合和子集-计算参与者在过去一起工作的小时数

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

我正在使用一个大型的员工数据集,这些员工在某些项目上进行过合作。数据的结构如下所示(对不起,标题有问题!)

我想计算两个人(即“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