【问题标题】:R comparing multiple values across dataframesR比较跨数据帧的多个值
【发布时间】:2022-11-10 00:55:48
【问题描述】:

我有一个看起来像的数据框(X)

ID1  ID2
1     5
1     2
1     3
2     3
3     4

另一个(Y)看起来像

ID  GROUP
1    5
2    5     
3    6
4    6

我正在尝试比较和计算同一行中的数据帧 X 中的 ID,它们是否在数据帧 Y 中列出的同一组中?

例如:

ID1  ID2  SAME.GROUP
1     2    YES
2     3    NO
3     4    YES

我在匹配一列之前已经完成了此操作,但无法弄清楚如何同时执行这两个操作。提前致谢

【问题讨论】:

    标签: r dataframe if-statement match


    【解决方案1】:

    您可以使用match

    transform(X, SAME.GROUP = Y$GROUP[match(X$ID1, Y$ID)] == Y$GROUP[match(X$ID2, Y$ID)])
    
      ID1 ID2 SAME.GROUP
    1   1   2       TRUE
    2   2   3      FALSE
    3   3   4       TRUE
    

    数据

    X <- read.table(header = T, text = "ID1  ID2
    1     2
    2     3
    3     4")
    
    
    Y <- read.table(header = T, text = "ID  GROUP
    1    5
    2    5     
    3    6
    4    6
    ")
    

    【讨论】:

    • 我只是返回并添加此代码,如果我希望它也将 group 的值粘贴到一个新列中,如果 SAME.GROUP == T,我该怎么做?
    【解决方案2】:

    我们可以使用连接

    library(data.table)
    setDT(X)[dcast(setDT(Y), GROUP ~ paste0("ID", rowid(GROUP)),
         value.var = "ID"), SAME.GROUP := "YES", on = .(ID1, ID2)]
    X[is.na(SAME.GROUP), SAME.GROUP := "NO"]
    

    -输出

    > X
         ID1   ID2 SAME.GROUP
       <int> <int>     <char>
    1:     1     2        YES
    2:     2     3         NO
    3:     3     4        YES
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多