我有一個數據幀DF這樣如何按我想要的順序拆分數據框?
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
我有一個數據幀DF這樣如何按我想要的順序拆分數據框?
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
只需切換列表中元素的順序即可。
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)
據split()
文檔,列表的組件由f
(電平轉換命名爲因素以後。 )。 f
是split()
的第二個參數。因此,分塊後,塊按照因子級別的順序出現。
該OP has requested該塊應按照它們出現在df
中相同的順序返回。這可以方便地與哈德利的forcats
包的fct_inorder()
功能來實現:
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
。編輯這也可以沒有任何包來實現的:
split(df, factor(df$id, levels = unique(df$id)))
感謝。但對於我的問題,我不能使用反向,因爲數據幀是在循環中生成的,有時我希望數據從id = 1到id = 2。 – Taliman
我不能使用反向來解決我的問題,因爲我有時想讓id按照從id = 1到id = 2的順序進行操作。 – Taliman
確定。但是,如果您可以指定訂單,則可以使用第一種方法。 – G5W