在R中的数据帧中逐行SUMIFS

问题描述 投票:0回答:1

新海报,但长期读者。我遇到了一个问题,我没有在R中找到解决方案。基本上是跨两个数据帧的条件求和。

每个数据帧都有多个XID和日期。

我想要的是D1中的SUMIF

有人可以解释一下怎么做吗?

非常感谢。

**编辑*

嗨,这两个数据框如下:

D1:

结构(列表(datecreat =结构(c)(17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17295,17295,17295,17295,17295,17295, 17295,17295,17295,17295,17295,17295,17295,17295,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240, 17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240,17240, 17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309, 17309,17309,17309,17295,17295),class =“Date”),dateadj = structure(c(17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395, 17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,1799 5,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395, 17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395, 17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395,17395),class =“Date”),dlisted = c( 155,155,155,155,155,155,155,155,155,155,155,155,155,155,100,100,100,100,100,100,100,100,100,100,100, 100,100,100,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, 155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,86,86,86,86,86, 86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,100,100) ,adjdlisted = c(10 5,105,105,105,105,105,105,105,105,105,105,105,105,105,50,50,50,50,50,50,50,50,50,50,50,50, 50,50,50,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,36,36,36,36,36, 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,50,50) ,XID = c(“1661533JPY”,“1661533RUE”,“1661533MYE”,“1661533AUE”,“1661533SGE”,“1661533BHE”,“1661533QAE”,“1661533SKE”,“1661533AEE”,“1661533TWE”,“1661533NZE”,“ 1661533USE“,”1661533HKE“,”1661533CNE“,”1661333HKE“,”1661333AEE“,”1661333BHE“,”1661333USE“,”1661333MYE“,”1661333JPY“,”1661333AUE“,”1661333SKE“,”1661333NZE“,”1661333TWE“ ,“1661333QAE”,“1661333RUE”,“1661333CNE”,“1661333SGE”,“1534203JPY”,“1534203RUE”,“1534203TWE”,“1534203SKE”,“1534203USE”,“1534203NZE”,“1534203QAE”,“1534203HKE”,“ 1534203SGE“,”1534203MYE“,”1534 203AUE“,”1534203BHE“,”1534203CNE“,”1534203AEE“,”1536523CNE“,”1536523QAE“,”1536523SKE“,”1536523BHE“,”1536523RUE“,”1536523AUE“,”1536523MYE“,”1536523JPY“,”1536523HKE“ ,“1536523NZE”,“1536523TWE”,“1536523USE”,“1536523AEE”,“1536523SGE”,“1536533SKE”,“1536533NZE”,“1536533HKE”,“1536533QAE”,“1536533BHE”,“1536533AEE”,“1536533AUE”,“ 1536533SGE“,”1536533RUE“,”1536533TWE“,”1536533CNE“,”1536533MYE“,”1536533JPY“,”1536533USE“,”1536693HKE“,”1536693CNE“,”1536693SKE“,”1536693NZE“,”1536693TWE“,”1536693MYE“ ,“1536693AEE”,“1536693JPY”,“1536693QAE”,“1536693AUE”,“1536693SGE”,“1536693USE”,“1536693RUE”,“1536693BHE”,“1536703HKE”,“1536703BHE”,“1536703CNE”,“1536703MYE”,“ 1536703TWE“,”1536703NZE“,”1536703AUE“,”1536703USE“,”1536703JPY“,”1536703AEE“,”1536703SKE“,”1536703SGE“,”1536703QAE“,”1536703RUE“,”1724593TWE“,”1724593QAE“)),. Names = c(“datecreat”,“dateadj”,“dlisted”,“adjdlisted”,“XID”),row.names = c(NA,100L),class =“data.frame”)

D2:

结构(列表(Product.ID = c)(1098803,1098803,1098803,1132503,1132503,1132503,1132503,1138833,1138833,1142033,1145443,1149133,1149133,1149883,1151313,1154713,11547331,1154733,115553,11155523, 1155883,1156803,1158133,1158883,1158903,1158983,1159943,1160033,1160043,1160763,1161003,1163693,1163693,116633,1165193,1165193,1166843,1166843,1168183,1168493,1170133,1170313,1172513,1173083,1174213, 1174213,1174213,1174213,1174213,1174443,1174473,1174473,1174473,1174473,1174473,1174473,1174523,1178173,1178173,1178233,1181483,1181483,1181483,1182023,1182023,1182023,1182083,1185163,1185163,1185303, 1187793,1187793,1187793,1187793,1187793,11887713,118897,1189703,1190023,1190353,1190353,1190363,1190363,1190363,1190403,1193383,1193383,1193433,1193473,1193473,1196043,1197753,1198223,1198223,1198223, 1198223,1198223,1198223,1198223,1198223),货币=结构(c(4L,8L,17L,4L,5L,8L,17L,17L,18L,4L,17 L,2L,17L,17L,4L,17L,6L,18L,13L,14L,17L,17L,4L,17L,5L,2L,17L,17L,17L,17L,4L,5L,7L,4L,2L, 17L,8L,17L,11L,5L,17L,6L,18L,2L,4L,6L,13L,15L,17L,4L,2L,4L,7L,9L,17L,18L,6L,4L,17L,17L, 9L,17L,18L,2L,9L,18L,17L,7L,17L,2L,6L,7L,14L,17L,18L,9L,4L,17L,7L,4L,18L,4L,5L,18L,7L, 4L,15L,17L,5L,17L,17L,4L,2L,4L,5L,6L,7L,10L,15L,17L),。标签= c(“AEE”,“AUE”,“BHE”,“CAD “,”CNE“,”EUR“,”GBP“,”HKE“,”JPY“,”MYE“,”NZE“,”QAE“,”RUE“,”SGE“,”SKE“,”TWE“, “USD”,“USE”),class =“factor”),Page.Views = c(1L,1L,1L,3L,2L,4L,4L,14L,1L,1L,1L,1L,3L,1L, 5L,1L,1L,1L,1L,1L,1L,4L,1L,1L,1L,1L,1L,1L,1L,2L,2L,1L,1L,1L,1L,2L,1L,6L,3L, 1L,1L,1L,1L,1L,1L,1L,1L,2L,1L,1L,3L,10L,3L,5L,6L,1L,1L,5L,2L,1L,1L,1L,1L,1L, 5L,2L,2L,1L,1L,1L,2L,1L,1L,2L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,2L,2L, 2L,1L,2L,2L,10L,6L,1L,4L,1L,1L,12L),日期=结构(c(1 7360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360, 17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360, 17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360, 17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360,17360) ,class =“Date”),XID = c(“1098803CAD”,“1098803HKE”,“1098803USD”,“1132503CAD”,“1132503CNE”,“1132503HKE”,“1132503USD”,“1138833USD”,“1138833USE”,“1142033CAD “,”1145443USD“,”1149133AUE“,”1149133USD“,”1149883USD“,”1151313CAD“,”1154713USD“,”1154733EUR“,”1154733USE“,”1155523RUE“,”1155523S GE“,”1155883USD“,”1156803USD“,”1158133CAD“,”1158883USD“,”1158903CNE“,”1158983AUE“,”1159943USD“,”1160033USD“,”1160043USD“,”1160763USD“,”1161003CAD“,”1163693CNE“ ,“1163693GBP”,“1164633CAD”,“1165193AUE”,“1165193USD”,“1166843HKE”,“1166843USD”,“1168183NZE”,“1168493CNE”,“1170133USD”,“1170313EUR”,“1172513USE”,“1173083AUE”,“ 1174213CAD“,”1174213EUR“,”1174213RUE“,”1174213SKE“,”1174213USD“,”1174443CAD“,”1174473AUE“,”1174473CAD“,”1174473GBP“,”1174473JPY“,”1174473USD“,”1174473USE“,”1174523EUR“ ,“1178173CAD”,“1178173USD”,“1178233USD”,“1181483JPY”,“1181483USD”,“1181483USE”,“1182023AUE”,“1182023JPY”,“1182023USE”,“1182083USD”,“1185163GBP”,“1185163USD”,“ 1185303AUE“,”1187793EUR“,”1187793GBP“,”1187793SGE“,”1187793USD“,”1187793USE“,”1187873JPY“,”1189703CAD“,”1189703USD“,”1190023GBP“,”1190353CAD“,”1190353USE“,”1190363CAD“ ,“1190363CNE”,“1190363USE”,“1190403GBP”,“1193383CAD”,“1193383SKE”,“1193433USD”,“1193473CNE”,“1193473USD”,“1196043USD”,“ 1197753CAD“,”1198223AUE“,”1198223CAD“,”1198223CNE“,”1198223EUR“,”1198223GBP“,”1198223MYE“,”1198223SKE“,”1198223USD“)),. Name = c(”Product.ID“,”货币“,”Page.Views“,”date“,”XID“),row.names = c(NA,100L),class =”data.frame“)

我想要的是*在D1中添加新列,总共D2 $ Page.Views IF D1 $ XID == D2 $ XID和D2 $ date是<D1 $ dateadj。*

谢谢

r dataframe sumifs
1个回答
0
投票

虽然OP中提到的数据对我来说似乎不准确,因为在XIDD1之间找不到匹配的D2值。 mapply函数可用于执行条件sum

    #Function accept value of XID and dateadj and return sum from D2    
    Summ <- function(x, y){
      sum(D2[D2$XID == x & D2$date < y, "Page.Views"])
    }
    #use mapply function to call Summ on row-wise data on D1
    D1$TPage.View <- mapply(Summ, D1$XID, D1$dateadj)
© www.soinside.com 2019 - 2024. All rights reserved.