2015-06-30 15 views
1

我有幾個表(兩個特別的例子)具有相同的結構。我想加盟上ID_Position & ID_NAME並生成一月和二月的輸出表的總和(有可能是兩列一些NAS)如何連接表並生成列的總和?

ID_Position<-c(1,2,3,4,5,6,7,8,9,10) 
Position<-c("A","B","C","D","E","H","I","J","X","W") 
ID_Name<-c(11,12,13,14,15,16,17,18,19,20) 
Name<-c("Michael","Tobi","Chris","Hans","Likas","Martin","Seba","Li","Sha","Susi") 
    jan<-c(10,20,30,22,23,2,22,24,26,28) 
    feb<-c(10,30,20,12,NA,3,NA,22,24,26) 

df1 <- data.frame(ID_Position,Position,ID_Name,Name,jan,feb) 


ID_Position<-c(1,2,3,4,5,6,7,8,9,10) 
Position<-c("A","B","C","D","E","H","I","J","X","W") 
ID_Name<-c(11,12,13,14,15,16,17,18,19,20) 
Name<-c("Michael","Tobi","Chris","Hans","Likas","Martin","Seba","Li","Sha","Susi") 
    jan<-c(10,20,30,22,NA,NA,22,24,26,28) 
    feb<-c(10,30,20,12,23,3,3,22,24,26) 

    df2 <- data.frame(ID_Position,Position,ID_Name,Name,jan,feb) 

我試圖內,充分參與。但是,這似乎爲我的工作慾望:

library(plyr) 

    test<-join(df1, df2, by =c("ID_Position","ID_Name") , type = "inner", match = "all") 

所需的輸出:

ID_Position Position ID_Name  Name   jan feb 
     1   A   11   Michael  20 20 
     2   B   12   Tobi   40 60 
     3   C   13   Chris   60 40 
     4   D   14   Hans   44 24 
     5   E   15   Likas   23 23 
     6   H   16   Martin   2 6 
     7   I   17   Seba   44 22 
     8   J   18   Li    48 44 
     9   X   19   Sha   52 48 
    10   W   20   Susi   56 52 
+2

所以加盟你這是TR爲了實現內部連接或完全連接?另外,你的數據集是相同的。你能提供你想要的輸出嗎?例如,以下工作? 'library(data.table); setkey(setDT(df1),ID_Position,ID_Name); setkey(setDT(df2),ID_Position,ID_Name); df2 [df1,。(jan = sum(jan,i.jan,na.rm = TRUE),sum(feb = feb,i.feb,na.rm = TRUE)),by = .EACHI]' –

+1

您的數據套在六個行中沒有任何信息在'feb'中 –

回答

2

你所需的輸出似乎不完全正確的,但這裏的有效利用data.table二進制的你如何能做到這樣的例子加入其中,可以有效地運行功能使用by = .EACHI選項

library(data.table) 
setkey(setDT(df1), ID_Position, ID_Name, Name) 
setkey(setDT(df2), ID_Position, ID_Name, Name) 
df2[df1, .(jan = sum(jan, i.jan, na.rm = TRUE), 
      feb = sum(feb, i.feb, na.rm = TRUE)), 
    by = .EACHI] 
#  ID_Position ID_Name Name jan feb 
# 1:   1  11 Michael 20 20 
# 2:   2  12 Tobi 40 60 
# 3:   3  13 Chris 60 40 
# 4:   4  14 Hans 44 24 
# 5:   5  15 Likas 46 0 
# 6:   6  16 Martin 0 6 
# 7:   7  17 Seba 44 0 
# 8:   8  18  Li 48 44 
# 9:   9  19  Sha 52 48 
# 10:   10  20 Susi 56 52 
+1

@ David。謝謝你的方法! – Mamba