【问题标题】:How to add a boolean value to a column when 2 different dataframes match on 2 columns in R?当 2 个不同的数据帧在 R 中的 2 列上匹配时,如何向列添加布尔值?
【发布时间】:2020-06-16 03:48:05
【问题描述】:

我有 2 个不同的数据框。我想在我的第二个数据框中添加一列并为其分配值 0 或 1。在 df1$code == df2$code & df1$date == df2$date 的情况下,我希望这些行为 0。一个直观且可重复的示例可能会使其更易于理解。

df1 <- data.frame(code = c("A", "B", "C", "D"), date = c(1,2,3,4))
df2 <- data.frame(code = c("A", "B", "E", "R", "V", "F"), date = c(1,2,3,4,5,6))
df3 <- data.frame(code = c("A", "B", "E", "R", "V", "F"), date = c(1,2,3,4,5,6), value =c(1,1,0,0,0,0))

DF1

  code date
1    A    1
2    B    2
3    C    3
4    D    4

DF2

  code date
1    A    1
2    B    2
3    E    3
4    R    4
5    V    5
6    F    6

我想要的结果 DF

  code date value
1    A    1     1
2    B    2     1
3    E    3     0
4    R    4     0
5    V    5     0
6    F    6     0

【问题讨论】:

    标签: r


    【解决方案1】:

    我会这样做:

    df2 %>% left_join(mutate(df1, value = 1)) %>%
      mutate(value  = coalesce(value, 0))
    # Joining, by = c("code", "date")
    #   code date value
    # 1    A    1     1
    # 2    B    2     1
    # 3    E    3     0
    # 4    R    4     0
    # 5    V    5     0
    # 6    F    6     0
    

    【讨论】:

      【解决方案2】:

      我们可以使用%in% 创建一个逻辑向量,然后用as.integer+ 将其强制为二进制

      df2$value <- +(df2$code %in% df1$code)
      df2
      #  code date value
      #1    A    1     1
      #2    B    2     1
      #3    E    3     0
      #4    R    4     0
      #5    V    5     0
      #6    F    6     0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        • 1970-01-01
        • 2018-11-17
        • 2020-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多