如何按照我想要的顺序拆分数据框?

Tal*_*man 2 split r dataframe

我有一个像这样的数据框 df

df 
xy id
10 5 2
12 10 2
15 0 1

我想按 id 拆分。我用过split(df, df$id),我得到

xy id
15 0 1

xy id
10 5 2
12 10 2

但是我希望 id=2 的那个比 id =1 的那个先出现所以基本上我希望输出是

xy id
10 5 2
12 10 2

xy id
15 0 1

Uwe*_*Uwe 5

根据 的文档split()列表的组件按f(转换为因子后...)的级别命名f是 的第二个参数split()。因此,块在分裂后按照因子水平的顺序出现。

OP已要求该块应该以相同的顺序按它们出现在返回df。这可以通过fct_inorder()Hadley的forcats包的功能方便地实现:

split(df, forcats::fct_inorder(factor(df$id)))
#$`2`
#   x  y id
#1 10  5  2
#2 12 10  2
#
#$`1`
#   x y id
#3 15 0  1
Run Code Online (Sandbox Code Playgroud)

注意

  • id本身保持不变。fct_inorder()仅用于定义拆分。
  • factor()仅需要额外调用 to ,因为id它的类型为integer

编辑这也可以在没有任何包的情况下实现:

split(df, factor(df$id, levels = unique(df$id)))
Run Code Online (Sandbox Code Playgroud)