Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在两个具有两个公共列的不同数据集中查找单个值(基于条件)_R_Match_Lookup_Matching - Fatal编程技术网

R 如何在两个具有两个公共列的不同数据集中查找单个值(基于条件)

R 如何在两个具有两个公共列的不同数据集中查找单个值(基于条件),r,match,lookup,matching,R,Match,Lookup,Matching,我有两个不同的数据集,如下所示: 我需要在dataset 2中添加call volume、put volume和total volume列,当且仅当:两个数据集中的ID和Date列都匹配时。我将根据数据集1中第3列中的值分离调用、put和total,其中C表示调用,P表示put,T表示total 我正在运行这段代码,但它不工作,只显示调用的示例,相同的规则适用于put和total dataset2$call\u volume我认为这有点像x/y问题。我认为您实际上是在尝试将dataset1转换

我有两个不同的数据集,如下所示:

我需要在dataset 2中添加call volume、put volume和total volume列,当且仅当:两个数据集中的ID和Date列都匹配时。我将根据数据集1中第3列中的值分离调用、put和total,其中C表示调用,P表示put,T表示total

我正在运行这段代码,但它不工作,只显示调用的示例,相同的规则适用于put和total


dataset2$call\u volume我认为这有点像x/y问题。我认为您实际上是在尝试将dataset1转换为宽格式以填充dataset2。在此之后,您可以左键连接两个框架

图书馆三年 图书馆弹琴 namesdataset1[3]% dplyr::选择-`call volume`、-`put volume`、-`total volume`%>% 左joindataset1%>% tidyr::pivot\u widernames\u from=选项类型,值\u from=体积%>% 重命名call Volume=C,Put Volume=P,Total Volume=`T`, by=cID,日期 >一个tibble:6x5 >ID date`Call Volume`` Put Volume``总音量` > > 1 44652 1997/01/02 34 250 284 > 2 44652 1997/01/03 1443 211 1654 >344652 1997/01/04不适用 > 4 56266 1997/01/02 30 0 30 > 5 56266 1997/01/03 4490 826 5316 >656266 1997/01/04不适用不适用不适用
由v0.3.0于2020年10月7日创建,如果我理解正确,您希望数据集2包含数据集1中的值(如果匹配),如果不匹配则为NA

如果是这种情况,您需要使用left_join

如果没有,请用所需输出更新您的问题

图书馆管理员 d1% selectID,日期%>% 左接缝1_更长 >加入,由=cID,日期 >一个tibble:6x5 >ID date`call volume`` put volume``总音量` > > 1 44652 1997/01/02 34 250 284 > 2 44652 1997/01/03 1443 211 1654 >344652 1997/01/04不适用 > 4 56266 1997/01/02 30 0 30 > 5 56266 1997/01/03 4490 826 5316 >656266 1997/01/04不适用不适用不适用
由v0.3.0于2020年10月7日创建。你好,阿拉巴马州。您尚未向我们展示您的数据。您已向我们展示了您的数据图片。任何人要演示一个有效的解决方案,就必须将图片转录成文本。请您使用问题下方的灰色编辑链接编辑您的问题,以包含这里的人可以使用的数据,好吗?您可以在控制台中键入dputdataset1和dputdataset2,然后将结果粘贴到问题中。谢谢。@AllanCameron谢谢你Allan,完成了。我希望它现在能工作!谢谢你,艾伦·卡梅伦。代码运行良好。然而,我在文章中没有提到数据集2包含许多其他与数据集1不共享的列,反之亦然。有没有办法让这些列保持原样?感谢you@AlaB在这种情况下,您需要在删除空NA列后将宽格式数据集1左键连接到数据集2。请看我的更新。谢谢@Icaro Bombonato。这也很有效!糟糕的是,我没有提到数据集1和2中的其他列不是这两个数据集共享的。
> dput(dataset1)
structure(list(ID = c(44652, 44652, 44652, 56266, 56266, 56266, 
44652, 44652, 44652, 56266, 56266, 56266), date = c("1997/01/02", 
"1997/01/02", "1997/01/02", "1997/01/02", "1997/01/02", "1997/01/02", 
"1997/01/03", "1997/01/03", "1997/01/03", "1997/01/03", "1997/01/03", 
"1997/01/03"), `option type (C,P,T: for calls, puts, and total)` = c("C", 
"P", "T", "C", "P", "T", "C", "P", "T", "C", "P", "T"), volume = c(34, 
250, 284, 30, 0, 30, 1443, 211, 1654, 4490, 826, 5316)), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

> dput(dataset2)
structure(list(ID = c(44652, 44652, 44652, 56266, 56266, 56266
), date = c("1997/01/02", "1997/01/03", "1997/01/04", "1997/01/02", 
"1997/01/03", "1997/01/04"), `call volume` = c(NA, NA, NA, NA, 
NA, NA), `put volume` = c(NA, NA, NA, NA, NA, NA), `total volume` = c(NA, 
NA, NA, NA, NA, NA)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))