我有一个像这样的数据框 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
根据 的文档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)