【发布时间】: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