所以我有这个:
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中做到这一点,我确定我需要进行大量的聚合,但我会不断得到与我的目标相同的结果。
非常感谢
答案 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