【问题标题】:How to arrange two data frame in R [duplicate]如何在R中排列两个数据框[重复]
【发布时间】:2021-09-04 03:57:33
【问题描述】:

我在 R 中有两个数据框如下:

 dat1<-read.table (text=" ID Surname Name Class
    12  Smith   Bani B
    14  Smith   Adami C
    13  Rose    Road AB
    11  Smith   Cherch AC
    10  Sarah   Naim D

    ", header=TRUE)

    dat2<-read.table (text=" ID Surname Name Class
    12  Smith   Bani A
    14  Smith   Adami B
    13  Rose    Road AB
    11  Smith   Cherch AC
    10  Sarah   Naim D

    ", header=TRUE)

我是这样单独安排的

k1 <- arrange(dat1, Surname)
k2 <- arrange(dat2, Surname)

现在我将 dat1 和 dat2 合并,然后进行排列

k3 <- merge(dat1, dat2, by = "ID")
k4 <- arrange(k3, Surname.x)

当我合并 dat1 和 dat2 时,我希望得到与姓氏的 K1 或 K2 完全相同的排列。有可能吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用dplyr::inner_join获得相同的订单。

    dplyr::inner_join(k1, k2, by = 'ID')
    
    #  ID Surname.x Name.x Class.x Surname.y Name.y Class.y
    #1 13      Rose   Road      AB      Rose   Road      AB
    #2 10     Sarah   Naim       D     Sarah   Naim       D
    #3 12     Smith   Bani       B     Smith   Bani       A
    #4 14     Smith  Adami       C     Smith  Adami       B
    #5 11     Smith Cherch      AC     Smith Cherch      AC
    

    【讨论】:

      【解决方案2】:

      我们可以考虑使用base R (R 4.1.0),方法是在merge 之前的一个数据集中创建一个序列列,然后执行order

      merge(transform(k1, rn = seq_along(ID)), k2, by = 'ID') |> 
           {\(dat) dat[order(dat$rn), setdiff(names(dat), 'rn')]}()
        ID Surname.x Name.x Class.x Surname.y Name.y Class.y
      4 13      Rose   Road      AB      Rose   Road      AB
      1 10     Sarah   Naim       D     Sarah   Naim       D
      3 12     Smith   Bani       B     Smith   Bani       A
      5 14     Smith  Adami       C     Smith  Adami       B
      2 11     Smith Cherch      AC     Smith Cherch      AC
      

      【讨论】:

        猜你喜欢
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多