【问题标题】:R: dcast descending orderR: dcast 降序
【发布时间】:2018-03-21 15:09:57
【问题描述】:

我有一个表单的数据框:

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

但是数据帧不是时间降序的。所以,我尝试了

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

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

【问题讨论】:

    标签: r dataframe reshape


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解决方案。没有 dplyr 有没有办法做到这一点?
    • @Leo69 使用foo$time2 &lt;- factor(time2, .... 而不是变异。其余的是基数 R 或 reshape2%&gt;% 除外,但那些只是把左边的东西作为右边东西的第一个参数)
    • 感谢你们两位。帮了大忙
    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2017-07-11
    • 2013-10-04
    • 2016-05-02
    • 2015-05-13
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多