R数据帧展平/重塑

时间:2017-08-08 21:12:30

标签: r dataframe

我在R的格式

中有一个数据框df
a,1
a,4
a,2
b,6
b,8
b,4
c,4
c,5
c,2

我想以

的形式表示df
a,1,4,2
b,6,8,4
c,4,5,2

在R中进行这种转换的更快的方法是什么,特别是如果我的数据框大小更大?

1 个答案:

答案 0 :(得分:1)

使用dplyrreshape2

library(dplyr)
library(reshape2)
dat=dat%>%group_by(V1)%>%dplyr::mutate(id=row_number())
as.data.frame(acast(dat, V1~id,value.var="V2"))

  1 2 3
a 1 4 2
b 6 8 4
c 4 5 2

数据输入:

dat
  V1 V2
1  a  1
2  a  4
3  a  2
4  b  6
5  b  8
6  b  4
7  c  4
8  c  5
9  c  2

编辑:时间

library(microbenchmark)
microbenchmark(
    acastmethod=acast(dat, a~id,value.var="b"), 
    dcastmethod=dcast(dat, a ~ id , value.var = "b"),
    tidyrmethod=spread(dat, key = id, value = b),
    xtabmethod=xtabs(b ~ a + id, data = dat)

)


Unit: milliseconds
        expr      min       lq     mean   median       uq       max neval  cld
 acastmethod 1.872223 2.035528 2.237846 2.210701 2.349068  3.783507   100 a   
 dcastmethod 3.124578 3.405817 3.626199 3.579038 3.815807  4.887430   100  b  
 tidyrmethod 4.025684 4.477290 4.765803 4.725326 5.035862  6.140385   100   c 
  xtabmethod 5.054490 5.529382 6.378615 5.714020 6.047391 61.242200   100    d