R ifelse 多条件查找虚拟变量

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

我有一个巨大的数据集,我想根据一组条件插入一个虚拟变量列:

我有我的主 df (A),其中有 500 万行和 10 列,其中 4 个是日期、小时、分钟、秒,这些数据从 2020 年到 2023 年。

在另一个 df (B) 上,我有相同的列,但只有 30 行。

我希望 A 查看 B,并将日期、小时、分钟、秒与 B 的日期、小时、分钟、秒匹配的所有行放入 1,其余所有行放入 0。所以,最后,我应该找到自己的专栏,其中有 30

1
和 4.999.970
0

更好的是日期、小时、分钟完全匹配,秒匹配“或多或少”(比如+/- 5秒)

你能帮忙吗?

我认为解决方案可能是:

A$dummy <- for (i in A){

ifelse("A$date"=="B$date"&"A$hour"=="B$hour"&
"A$minute"=="B$minute"&or("A$second">="B$second"-5,"A$second"<="B$second"+5),1,0)
}
r if-statement nested-loops lookup dummy-variable
1个回答
0
投票

我认为你可以使用

dplyr
lubridate
函数。试试这个:

## load the libraries
library(lubridate)
library(dplyr)

## create df A
dfA <- data.frame(
  date = seq(as.Date("2023-08-25"), by = "days", length.out = 100),
  sym = rep("EUR_ab6m_05y", 100),
  hour = sprintf("%02d", rep(0:23, length.out = 100)),
  minute = sprintf("%02d", rep(0:59, length.out = 100)),
  second = sprintf("%02d", rep(0:59, length.out = 100))
)

## create data.frame B (just a selected part of df A)
dfB <- dfA[c(1:10), ]

## Transform variables to datetime
dfA %>% 
  mutate(new_date = str_glue('{date} {hour}:{minute}:{second}') %>% ymd_hms()) -> dfA

dfB %>% 
  mutate(new_date = str_glue('{date} {hour}:{minute}:{second}') %>% ymd_hms()) -> dfB
dfB$new_date -> list_dates

## Verify the condition
dfA %>% 
  mutate(dummy = ifelse(new_date %in% list_dates, 1, 0)) -> dfA

代码的大部分是创建 df。

© www.soinside.com 2019 - 2024. All rights reserved.