快速重塑的方法

时间:2012-08-10 19:00:32

标签: r

  

可能重复:
  Reshape data from long to wide format R

使用:

day <- c(1, 1, 2, 2)
prod <- c(1, 2, 1, 2)
cost <- c(20.1, 17.7, 15.2, 23.3)
record <- data.frame(day=day, prod=prod, cost=cost)

record
  day prod cost
1   1    1 20.1
2   1    2 17.7
3   2    1 15.2
4   2    2 23.3

将数据重塑为一种好的(快速)方法是:

       day_1 day_2
prod_1  20.1  15.2
prod_2  17.7  23.3

谢谢!

3 个答案:

答案 0 :(得分:6)

我们也可以使用xtabs

xtabs(cost ~ prod + day, data = record)

    day
prod    1    2
   1 20.1 15.2
   2 17.7 23.3

答案 1 :(得分:4)

为什么不使用tapply - sum函数无关紧要,因为你有唯一的值:

> tapply(record$cost,list(record$prod, record$day), FUN=sum)

     1    2
1 20.1 15.2
2 17.7 23.3

答案 2 :(得分:3)

我认为dcast包中的reshape2语法最简单:

library(reshape2)
dcast(prod ~ day, data=record, value.var='cost')

  prod    1    2
1    1 20.1 15.2
2    2 17.7 23.3

然而,这个问题已被多次询问,很可能会很快结束。