2014-10-20 167 views
0

我有一個像重新安排數據幀

col1 col2 col3 col4 
    a  0  t  .1 
    b  0  t  .2 
    a  1  f  .3 
    b  1  f  .4 

數據幀我需要重新安排它這種格式

  a  b 
0 t .1 .2 
1 f .3 .4 

我知道這可以用dcast函數來完成。但我無法弄清楚究竟是如何?

回答

2

正如你提到的,這可以用dcast從 「reshape2」 完成:

library(reshape2) 
dcast(mydf, col2 + col3 ~ col1, value.var = "col4") 
# col2 col3 a b 
# 1 0 t 0.1 0.2 
# 2 1 f 0.3 0.4 

它也可以與reshape從基礎R做:

> reshape(mydf, direction = "wide", idvar = c("col2", "col3"), timevar = "col1") 
    col2 col3 col4.a col4.b 
1 0 t 0.1 0.2 
3 1 f 0.3 0.4 

而且隨着spread ,來自「tidyr」:

> library(dplyr) 
> library(tidyr) 
> mydf %>% spread(col1, col4) 
    col2 col3 a b 
1 0 t 0.1 0.2 
2 1 f 0.3 0.4 
+0

如果我必須按降序排列每行中的a和b的所有值,該怎麼辦? – user3664020 2014-10-20 06:39:10

+1

@ user3664020 - 先對原始數據中的值進行排序,然後重新整形。 – thelatemail 2014-10-20 06:46:18