2017-03-12 15 views
0

を維持しながら:集約だから私は、この持っている2つのユニークなR

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と日付が一意であることがしたいです各行に「Days」と「Result」を合計したい場合

Rでこれを行う方法を考えることができません。集計をたくさん行う必要があると確信していますが、結果は私が目指しているものです。

感謝

答えて

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 
+0

ありがとうございました! – TheDream

+0

あなたは大歓迎です... – Codutie

1

あなたができる2つの式を用いて、変数、その後mergeaggregate 2つの凝集体

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 
+0

これもありがとうございます!私は正しい答えとして彼をクリックしたので、Codutieが最初に答えました。 – TheDream

1

と別のオプションがあります

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 
関連する問題