在2列上聚合,同时保留两个唯一的R

时间:2017-03-12 19:25:15

标签: r aggregate aggregate-functions

所以我有这个:

Staff   Result  Date  Days
1       50      2007  4
1       75      2006  5
1       60      2007  3
2       20      2009  3
2       11      2009  2

我想谈谈这个问题:

Staff   Result  Date  Days
1       55      2007  7
1       75      2006  5
2       15      2009  5

我希望员工ID和日期在每一行都是唯一的,但我想总结一下“天”。并且意味着'结果'

我无法解决如何在R中做到这一点,我确定我需要进行大量的聚合,但我会不断得到与我的目标相同的结果。

非常感谢

3 个答案:

答案 0 :(得分:3)

执行此操作的最简单方法是group_by人员和日期,并使用dplyr包汇总结果:

require(dplyr)

df <- data.frame(Staff = c(1,1,1,2,2),
             Result = c(50, 75, 60, 20, 11),
             Date = c(2007, 2006, 2007, 2009, 2009),
             Days = c(4, 5, 3, 3, 2)) 

df %>% 
   group_by(Staff, Date) %>% 
   summarise(Result = floor(mean(Result)),
             Days = sum(Days)) %>% 
   data.frame

   Staff Date Result Days
1      1 2006     75    5
2      1 2007     55    7
3      2 2009     15    5

答案 1 :(得分:1)

您可以使用公式aggregate对两个变量进行merge,然后使用merge(aggregate(Result ~ Staff + Date, data=df, mean), aggregate(Days ~ Staff + Date, data=df, sum)) Staff Date Result Days 1 1 2006 75.0 5 2 1 2007 55.0 7 3 2 2009 15.5 5 两个聚合

<?
$array1 = array(0=>"1", 1=>"2", 2=>"3");
$array2 = array(0=>"a", 1=>"b", 2=>"c");

foreach ($array1 as $origKey => &$subArray) 
  $new[] = $subArray.$array2[$origKey];


print_r($new);
//Output: Array ( [0] => 1a [1] => 2b [2] => 3c )

答案 2 :(得分:1)

以下是data.table

的另一个选项
library(data.table)
setDT(df1)[, .(Result = floor(mean(Result)), Days = sum(Days)), .(Staff, Date)]
#   Staff Date Result Days
#1:     1 2007     55    7
#2:     1 2006     75    5
#3:     2 2009     15    5