r - 如何在具有两列共同的两个不同数据集中查找单个值(基于条件)
问题描述
我有两个不同的数据集,如下所示:
当且仅当:两个数据集中的 ID 和日期列都匹配时,我需要在数据集 #2 中添加调用量、放置量和总量列。我根据数据集 #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"))
更新:我在两个数据集中还有许多其他列彼此完全不同,唯一常见的是下面图片和数据集中显示的列。
解决方案
我认为这是一个 x/y 问题。我认为您实际上是在尝试转换dataset1
为宽格式来填充dataset2
. 在此之后,你可以left_join
两帧。
library(tidyr)
library(dplyr)
names(dataset1)[3] <- "option_type"
dataset2 %>%
dplyr::select(-`call volume`, -`put volume`, -`total volume`) %>%
left_join(dataset1 %>%
tidyr::pivot_wider(names_from = "option_type", values_from = "volume") %>%
rename("Call Volume" = C, "Put Volume" = P, "Total Volume" = `T`),
by = c("ID", "date"))
#> # A tibble: 6 x 5
#> ID date `Call Volume` `Put Volume` `Total Volume`
#> <dbl> <chr> <dbl> <dbl> <dbl>
#> 1 44652 1997/01/02 34 250 284
#> 2 44652 1997/01/03 1443 211 1654
#> 3 44652 1997/01/04 NA NA NA
#> 4 56266 1997/01/02 30 0 30
#> 5 56266 1997/01/03 4490 826 5316
#> 6 56266 1997/01/04 NA NA NA
由reprex 包于 2020-10-07 创建(v0.3.0)
推荐阅读
- sql - SQL 中的两个条件必须为真
- flutter - 颤振barcode_scan改变颜色
- amazon-web-services - 如何在 AWS 安全组中将 IPv6 列入白名单?
- sql-server - 如何将 MERGE 语句与 VARBINARY 数据一起使用
- asp.net-mvc - .NET Swagger (Swashbuckle):如何处理带有大量参数的请求
- segger-jlink - 我应该如何将 Jlink edu 设备输出与板输入相匹配
- r - 需要一个函数或其他东西来运行我所有的其他函数
- flutter - CupertinoDynamicColor 不适用于 Flutter 主题中的文本样式
- python-3.x - 使用 selenium (Python) 滚动以下和关注者列表
- python - 如何在顺序模型中使用 tf.keras.backend.ctc_decode?