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

时间:2017-04-14 23:47:48

标签: r dataframe split

我有一个像这样的数据框

df 
x     y   id
10   5     2
12   10    2
15   0     1

我想通过id分割。我使用了split(df, df$id),我得到了

x   y   id
15  0   1

x   y    id
10  5    2
12  10   2

但我希望id = 2的那个比id = 1的那个更强 所以基本上我希望输出

x     y     id
10   5      2
12   10     2

x    y    id
15   0    1

2 个答案:

答案 0 :(得分:3)

根据split()的文档,列表的组件以f(转换为因子...)的级别命名。 fsplit()的第二个参数。因此,在分割之后,块会以因子级别的顺序出现。

应该以{{1​​}}中显示的顺序返回块的OP has requested。使用Hadley df包的fct_inorder()函数可以方便地实现这一点:

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 本身保持不变。 id仅用于定义拆分。
  • 仅需要对fct_inorder()进行额外调用,因为factor()的类型为id

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

integer

答案 1 :(得分:1)

只需切换列表中元素的顺序即可。

Sdf = split(df, df$id)
Sdf = Sdf[c(2,1)]

$`2`
   x  y id
1 10  5  2
2 12 10  2

$`1`
   x y id
3 15 0  1

您也可以使用rev(反向)

Sdf = rev(Sdf)