【发布时间】:2021-01-22 18:17:13
【问题描述】:
我有两个不同的数据集,如下所示:
当且仅当:两个数据集中的 ID 和 Date 列都匹配时,我需要在数据集 #2 中添加 call volume、put volume 和 total volume 列。我根据数据集 #1 中第 3 列中的值(C 代表调用,P 代表看跌,T 代表总计)来区分看涨、看跌和总计。
我正在运行此代码,但它不起作用(仅显示调用示例,同样的规则适用于 put 和 totals)。
dataset2$call_volume <- if(dataset1$optiontype== "C")
{ dataset1$volume [ match (
interaction(dataset2$ID,dataset2$date),
interaction(dataset1$ID,dataset1$date)
)]}
有没有人建议我如何继续编写代码?非常感谢!
> 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"))
更新:我在两个数据集中还有许多其他列彼此完全不同,唯一常见的是下面图片和数据集中显示的列。
【问题讨论】:
-
嗨,阿拉。您尚未向我们展示您的数据。您向我们展示了您的数据的图片。为了让任何人展示一个可行的解决方案,他们必须将图片转录成文本。您能否编辑您的问题(使用问题下方的灰色“编辑”链接)以包含这里的人们可以使用的数据?您可以在控制台中输入
dput(dataset1)和dput(dataset2),然后将结果粘贴到您的问题中。谢谢。 -
@AllanCameron 谢谢艾伦,完成。我希望它现在有效!