我有一个像这样的数据框
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
答案 0 :(得分:3)
根据split()
的文档,列表的组件以f
(转换为因子...)的级别命名。 f
是split()
的第二个参数。因此,在分割之后,块会以因子级别的顺序出现。
应该以{{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)