R слияние на основе условия, отличного от равенства

у меня есть фрейм данных, который выглядит примерно так:

date            minutes_since_midnight   value
2015-01-01      50                       2
2015-01-01      60                       1.5
2015-01-02      45                       3.3
2015-01-03      99                       5.5

и другой фрейм данных выглядит примерно так

date        minutes_since_midnight   other_value
2015-01-01  55                       12
2015-01-01  80                       33
2015-01-02  45                       88

что я хочу сделать, это добавить еще один столбец в первый фрейм данных, который является boolean значение Существует ли строка во втором фрейме данных для равного значения в дата и minutes_since_midnight что это меньше или равно в minutes_since_midnight из первого фрейма данных. Таким образом, для приведенных выше данных примера мы получим:

date        minutes_since_midnight    value  has_other_value
2015-01-01  50                        2      False
2015-01-01  60                        1.5    True
2015-01-02  45                        3.3    True
2015-01-03  99                        5.5    False

как я могу это сделать?

надеюсь, это имеет смысл,

спасибо заранее

2 ответов


вы не можете переименовать переменные minutes_since_midnight to minutes_since_midnight1 и minutes_since_midnight2, объединить два фрейма данных вместе, а затем создать необходимый has_other_value переменная с оператором if else.


Я, вероятно, присоединюсь к данным.рамки вдоль строк другого ответа, затем создайте переменную и удалите ненужные столбцы. Но вот вариант использования dplyr пакет для выполнения шагов, как вы их описываете:

library(dplyr)
df1$has_other_value <-
  left_join(df1, df2 %>%
              group_by(date) %>%
              summarise(minMins = min(minutes_since_midnight)),
            by="date")$minMins <= df1$minutes_since_midnight

df1$has_other_value[is.na(df1$has_other_value)] <- FALSE

результат:

        date minutes_since_midnight value has_other_value
1 2015-01-01                     50   2.0           FALSE
2 2015-01-01                     60   1.5            TRUE
3 2015-01-02                     45   3.3            TRUE
4 2015-01-03                     99   5.5           FALSE