簡體   English   中英

如何聯接表並生成列總和?

[英]How to join tables and generate sums of columns?

我有幾個具有相同結構的表(特別是兩個表)。 我想加入ID_Position和ID_Name並在輸出表中生成一月和二月的總和(兩列中可能都有一些NA)

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

您所需的輸出似乎並不完全正確,但是這里有一個示例,說明如何使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM