代码之家  ›  专栏  ›  技术社区  ›  Sharif Amlani

如何使一个数据帧中的行顺序与另一个数据帧中的行顺序相匹配?

  •  1
  • Sharif Amlani  · 技术社区  · 4 年前

    我正在处理两个数据帧。我希望一个数据帧中的行顺序与另一个数据帧中的行顺序相匹配。

    例如:

    terms_1 <- c("Cat", "Hat", "Dog", "Bat", "Mat", "Cow")
    terms_2 <- c("Dog", "Cow", "Mat", "Cat", "Hat", "Bat")
    
    terms_1_df <- data.frame(terms = terms_1, values = sample(seq(1,100, 1), replace = T, length(terms_1)))
    terms_2_df <- data.frame(terms = terms_2, values = sample(seq(1,100, 1), replace = T, length(terms_2)))
    
    
    > terms_1_df
      terms values
    1   Cat     22
    2   Hat     47
    3   Dog     91
    4   Bat     48
    5   Mat     60
    6   Cow     46
    > terms_2_df
      terms values
    1   Dog     94
    2   Cow     35
    3   Mat     68
    4   Cat     21
    5   Hat     67
    6   Bat     60
    

    我要排成一排 terms_2_df 重新排列以匹配 terms terms_1_df

    非常感谢。

    2 回复  |  直到 4 年前
        1
  •  1
  •   akrun    4 年前

    我们可以使用 match 在两个数据集之间的“术语”列上,返回与第二个数据集中相同的顺序

    terms2_df_new <- terms_2_df[match(terms_1_df$terms, terms_2_df$terms),]
    

    -输出

    terms_2_df_new
      terms values
    4   Cat     30
    5   Hat     55
    1   Dog     60
    6   Bat     93
    3   Mat     46
    2   Cow      1
    
        2
  •  1
  •   Ronak Shah    4 年前

    factor order -

    terms_2_df[order(factor(terms_2_df$terms, unique(terms_1_df$terms))), ]
    
    #  terms values
    #4   Cat     89
    #5   Hat     34
    #1   Dog     27
    #6   Bat     93
    #3   Mat     38
    #2   Cow     96