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

R: 子集数据。按精确的行名帧

  •  2
  • user890739  · 技术社区  · 7 年前

    R具有部分匹配行的特性。名称。例如:

    > d <- data.frame(a=1:2, row.names = c('1', '711'))
    > d
        a
    1   1
    711 2
    

    部分匹配:

    > d['7',]
    [1] 2
    

    但如果我只需要精确匹配怎么办?所以我想要一个 NA 不匹配的行。 我不想使用 %in% 运算符,因为它不保持顺序,也不返回空行。

    > d[rownames(d) %in% c('711', '9', '1'),]
    [1] 1 2
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   user890739    2 年前

    使用 match 作用

    > d[match(c('711', '9', '1'), rownames(d)),]
    [1]  2 NA  1
    

    这正是我需要的。

    添加内容:

    而不是使用 data.frame 使用 Tibbles .

    从文档中( https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html ):

    Tibbles对美元的要求也更严格。Tibbles从不进行部分匹配,如果列不存在,将抛出警告并返回NULL