R:dcast降序

时间:2018-03-21 15:09:57

标签: r dataframe reshape

我有一个格式的数据框:

time1 <- rep(seq(1,3),3)
time2 <- c(rep(1,3),rep(2,3), rep(3,3))
value <- seq(1:9)
foo <- data.frame(time1,time2,value)

      time1   time2   value
    1     1     1     1
    2     1     2     2
    3     1     3     3
    4     2     1     4
    5     2     2     5
    6     2     3     6
    7     3     1     7
    8     3     2     8
    9     3     3     9

我想使用dcast来获取以下格式的数据框:

time2    1   2    3 (values of time1)
3        3   6    9 
2        2   5    8
1        1   4    7

我的第一次尝试是:

dcast(foo, time2 ~ time1,  value.var = "value")

但数据框不是time2的降序。所以,我试过

dcast(foo, reorder(time2, rev(time2) ~ time1,  value.var = "value") 

但现在列名错了。有没有一种有效的方法来获取dcast的输出形式?

1 个答案:

答案 0 :(得分:1)

您可以使用factor()time2转换为有序因子,并使用levels参数设置顺序。

library(dplyr)
library(reshape2)
foo %>%
  mutate(time2 = factor(time2, levels = rev(unique(time2)))) %>%
  dcast(time2 ~ time1, value.var = 'value')