【问题标题】:How to rearrange a tibble by rownames如何按行名重新排列小标题
【发布时间】:2019-05-16 18:39:09
【问题描述】:

传统数据框支持按行名重新排列行:

> df <- data.frame(c1 = letters[1:3], c2 = 1:3, row.names = paste0("x", 1:3))
> df
   c1 c2
x1  a  1
x2  b  2
x3  c  3

#' If we want, say, row "x3" and "x1":
> df[c("x3", "x1"), ]
   c1 c2
x3  c  3
x1  a  1

说到 tibble,由于它放弃了行名的概念,我想知道实现类似目标的标准方法是什么。

> tb <- as_tibble(rownames_to_column(df))
> tb
# A tibble: 3 x 3
  rowname c1       c2
  <chr>   <fct> <int>
1 x1      a         1
2 x2      b         2
3 x3      c         3
> ? 

谢谢。

更新

我可以想出以下解决方案:

> tb[match(c("x3", "x1"), tb[["rowname"]]), ]
# A tibble: 2 x 3
  rowname c1       c2
  <chr>   <fct> <int>
1 x3      c         3
2 x1      a         1

但它看起来很笨拙。有人有更好的主意吗?

更新 2

在更笼统的意义上,我的问题可以改写为:根据tidyverse 的语法,什么是最简洁和快速的等价物

df[c("x3", "x1"), ]

也就是说,对数据框的行进行子集化和重新排列。

【问题讨论】:

  • 我不确定我是否理解...一旦将其转换为常规列,您就可以像其他列一样根据该列中的值重新排列或设置子集。
  • 致电arrange 安排rowname 列?还是发生了更复杂的事情而我错过了?
  • 我仍然不明白,如果您已经在使用 tibbles,为什么您不使用 filter(),就像使用任何其他变量一样。
  • @joran,AFAIK,似乎filter 没有按指定顺序保存结果...
  • 不,有一个单独的命令,arrange

标签: r dataframe tidyverse tibble rowname


【解决方案1】:

如 joran 所述,您可以使用过滤器选择感兴趣的行,然后以特定顺序排列小标题,手动定义,您可以使用 arrangefactor

tibble(rowname = paste0("x", 1:3), c1 = letters[1:3], c2 = 1:3) %>%
  filter(rowname %in% c("x3", "x1")) %>%
  arrange(factor(rowname, levels = c("x3", "x1")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2019-09-17
    • 2021-10-24
    • 2021-05-12
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多