R基于平等以外的条件合并

时间:2015-04-20 12:48:07

标签: r merge dataframe

我有一个类似于:

的数据框
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

我想要做的是在第一个数据框中添加另一列,即布尔值是否在日期<中第二个数据框中存在相等值的行/ strong>列,然后是 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 个答案:

答案 0 :(得分:5)

我可能会沿着另一个答案的行加入data.frames,然后创建变量并删除不需要的列。但是这里有一个使用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

答案 1 :(得分:2)

您是否可以将变量 minutes_since_midnight 重命名为 minutes_since_midnight1 minutes_since_midnight2 ,将两个数据框合并在一起,然后创建所需的 has_other_value 带有if else语句的变量。