代码之家  ›  专栏  ›  技术社区  ›  Mark

在两个不同的数据帧中复制给定列的顺序

  •  1
  • Mark  · 技术社区  · 5 年前

    我有两个数据帧

    > x
                   tags freq.Freq
    1            #solar         1
    2      #solarpanels         2
    3             #wind         3
    4    #ClimateChange         4
    5           #energy         5
    6  #renewableenergy         6
    7         #windfarm         7
    8           #Suncor         8
    9            #Solar         9
    10        #WindTree        10
    11       #renewable        11
    12      #climatecri        12
    13      #renewables        13
    

    > y
                   tags freq.Freq
    1        #renewable       740
    2    #ClimateChange       722
    3             #wind       638
    4           #energy       541
    5         #WindTree       525
    6       #climatecri       518
    7            #solar       359
    8  #renewableenergy       326
    9            #Solar       296
    10      #renewables       245
    11     #solarpanels      1029
    12        #windfarm       291
    13          #Suncor       282
    

    y$freq.Freq 是错误的。我想根据 x #renewable 在里面 x$freq.Freq #ClimateChange x$freq.freq频率 等于4等等。那么第二个数据帧应该是:

    > y
                   tags freq.Freq
    1        #renewable       11
    2    #ClimateChange       4
    3             #wind       3
    4           #energy       5
    5         #WindTree       10
    6       #climatecri       12
    7            #solar       1
    8  #renewableenergy       6
    9            #Solar       9
    10      #renewables       13
    11     #solarpanels       2
    12        #windfarm       7
    13          #Suncor       8
    

    我怎样才能得到 y ? 我试过了 x[order(y$tags),] 但我没有得到正确的结果。

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

    我们可以利用 match

    x$freq.Freq[match(y$tags, x$tags)]
    #[1] 11  4  3  5 10 12  1  6  9 13  2  7  8
    

    或者另一个选择是 factor

    as.integer(factor(y$tags, levels = x$tags))
    #[1] 11  4  3  5 10 12  1  6  9 13  2  7  8
    

    或与 mutate

    library(dplyr)
    y %>% 
        mutate(freq.Freq = match(tags, x$tags))
    

    x <- structure(list(tags = c("solar", "solarpanels", "wind", "ClimateChange", 
    "energy", "renewableenergy", "windfarm", "Suncor", "Solar", "WindTree", 
    "renewable", "climatecri", "renewables"), freq.Freq = 1:13), class = "data.frame", row.names = c("1", 
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
    ))
    
    y <- structure(list(tags = c("renewable", "ClimateChange", "wind", 
    "energy", "WindTree", "climatecri", "solar", "renewableenergy", 
    "Solar", "renewables", "solarpanels", "windfarm", "Suncor"), 
        freq.Freq = c(740L, 722L, 638L, 541L, 525L, 518L, 359L, 326L, 
        296L, 245L, 1029L, 291L, 282L)), class = "data.frame", row.names = c("1", 
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
    ))