【问题标题】:Need to compare two dataframes of different length and update a column of one of the dataframe based on matching criteria in r需要比较两个不同长度的数据帧,并根据 r 中的匹配条件更新其中一个数据帧的列
【发布时间】:2016-08-12 19:50:11
【问题描述】:

我有两个数据框 df1 和 df2。 df1 > df2 大小。

df1 -> A      B        C       D     E  F
       1   4-23-2015   abc    dcv    0  0
       2   5-23-2015   abc    dcvm    1  0
       3   4-24-2015   ab    dcv      0  0
       4   4-23-2014   abc    dcv     0  0

df2 -> A      B         C      D     E F
       1   4-23-2015   abc    dcv    0  0
       3   4-24-2015   abc    dcv    0  0
       9   4-23-2015   abc    dcv    0  0

现在我要比较

df1$A with df2$A and df1$B with df2$B and when it is true then put df1$F =1. So my output for the above example will be

  df1 -> A      B        C       D     E  F
       1   4-23-2015   abc    dcv    0    1
       2   5-23-2015   abc    dcvm    1   0
       3   4-24-2015   ab    dcv      0   1
       4   4-23-2014   abc    dcv     0   0

B 列是日期类型的列,并且比较是行与行。

【问题讨论】:

  • 请显示一些示例输入或详细说明 - 您是否按索引比较数据(row2 与 row2)以及如何处理不可比较的数据(有关 df1 权限的更多记录?)
  • 是...行与行.....与不可比较的无关......
  • 您可以通过merge(df1, df2, by = c("A", "B"), all.x = TRUE) 查看匹配的行。

标签: r dataframe


【解决方案1】:

根据你的例子,

df1$F[apply(df1[,c('A', 'B')], 1, paste, collapse = '') %in% apply(df2[,c('A', 'B')], 1, paste, collapse = '')] <- 1
df1
#  A         B   C    D E F
#1 1 4-23-2015 abc  dcv 0 1
#2 2 5-23-2015 abc dcvm 1 0
#3 3 4-24-2015  ab  dcv 0 1
#4 4 4-23-2014 abc  dcv 0 0

【讨论】:

    【解决方案2】:

    这几乎是常见的merge 欺骗,但为了更清晰的输出和更快的性能,我建议data.table 二进制左连接并通过引用同时更新。类似的东西

    library(data.table)
    setDT(df1)[df2, F := 1L, on = c("A", "B")]
    df1
    #    A         B   C    D E F
    # 1: 1 4-23-2015 abc  dcv 0 1
    # 2: 2 5-23-2015 abc dcvm 1 0
    # 3: 3 4-24-2015  ab  dcv 0 1
    # 4: 4 4-23-2014 abc  dcv 0 0
    

    否则,一个简单的merge(df1, df2, by = c("A", "B"), all.x = TRUE) 将显示匹配的行,但您需要删除不必要的列并相应地更新F

    【讨论】:

    • @tanay 请参阅here 了解一些教程。
    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多