簡體   English   中英

r data.table條件和引用/從另一個單獨的data.table執行查找

[英]r data.table conditional sum referencing / performing a lookup from another separate data.table

我是R和data.tables的初學者,但已經閱讀了足夠的信息,可以確信他們對大型數據集的速度/效率。 我搜索了高低,找不到我認為容易出問題的答案。

這是問題:給定兩個數據表DT1和DT2

DT1 <- data.table(AA=c("A","B","C","A","B","C","A","B","C","A","B","C"),
                  BB=c(35,45,25,25,85,15,55,55,95,35,25,75)
                  )

DT2 <- data.table(CC=c("A","B","C","A","B","C"),
                  DD=c(10,20,30,40,50,60),
                  EE=c(5,5,10,10,15,20)
                  )

如果給定DT1每行的現有值,如果滿足多個條件,如何向DT1添加一個新列(稱為NewCol),該列對DT2的EE列求和:

1)列AA =列CC

2)列DD> = BB列

換句話說,總和EE,其中AA = CC且DD> = BB。

所需的輸出是:

DT1_DesiredOutput <- data.table(AA=c("A","B","C","A","B","C","A","B","C","A","B","C"),
                                BB=c(35,45,25,25,85,15,55,55,95,35,25,75),
                                NewCol=c(10,15,30,10,0,30,0,0,0,10,15,0)
                                )

加入? 合並? 組? 別的什么? 猜測循環DT1的每一行效率很低?

我還想知道如何使其可擴展,即添加幾個條件(例如,幾個大於,小於,等於混合“AND”和“OR”的值)。

非常感謝!

ps,這是Excel中的一塊蛋糕( 咳嗽次優,我知道),有一個數組公式如

{=SUM(IF( ($F$7:$F$12=B7)*($G$7:$G$12>C7), $H$7:$H$12))}

復制在NewCol的每個單元格中。 我不想把這兩個Excel表格混雜在一起,顯然Excel並不是很好的原因,但是如果它在Excel中很容易,那么在R data.tables中它必須比較容易,對吧?

在最新的dev 1.9.7版本中使用非equi連接的魔力:

DT2[DT1, on = .(CC = AA, DD >= BB), .(NewCol = sum(EE, na.rm = T)), by = .EACHI]
#    CC DD NewCol
# 1:  A 35     10
# 2:  B 45     15
# 3:  C 25     30
# 4:  A 25     10
# 5:  B 85      0
# 6:  C 15     30
# 7:  A 55      0
# 8:  B 55      0
# 9:  C 95      0
#10:  A 35     10
#11:  B 25     15
#12:  C 75      0

希望結果連接列的命名在將來變得更合乎邏輯,現在只需使用setnames

暫無
暫無

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

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