我有一个形式的数据框:

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")

但是数据帧不是时间2的降序。所以,我尝试了
dcast(foo, reorder(time2, rev(time2) ~ time1,  value.var = "value")

但是现在列名是错误的。有没有一种有效的方法来使用dcast获取输出表单?

最佳答案

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

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

08-04 06:36