R:如何为每个级别(用于重塑)创建一个具有序号(按日期)的新变量。) [英] R: How can I make a new Variable with numbers of order (by date) for every level (for reshaping).)

查看:10
本文介绍了R:如何为每个级别(用于重塑)创建一个具有序号(按日期)的新变量。)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是R的新手,我必须处理大量的数据集。我在谷歌上搜索了很多,但就是找不到做我需要的事情的方法(尽管这听起来很容易做到)。

我想要做的是以广泛的形式重塑我的数据。要以我想要的方式完成它,我需要一个新变量,每个因素都有Order by Date的编号(每个新因素从一个开始)。

现在,这是我所拥有的一个小示例:

ID<-c("A","A","A","B","B","C","D","D","D","D")

Date<-c("01-01-2014", "05-01-2014", "06-01-2014",
        "01-01-2014", "12-01-2014", "25-01-2014", 
        "06-01-2014", "12-01-2014", "25-01-2014", 
        "26-01-2014")

Value<-c(2.5, 3.4, 2.5, 305.66, 300.00, 55.01,
        205.32, 99.99, 210.25, 105.125)

mydata<-data.frame(ID, Date, Value)
mydata

ID       Date   Value
1   A 01-01-2014   2.500
2   A 05-01-2014   3.400
3   A 06-01-2014   2.500
4   B 01-01-2014 305.660
5   B 12-01-2014 300.000
6   C 25-01-2014  55.010
7   D 06-01-2014 205.320
8   D 12-01-2014  99.990
9   D 25-01-2014 210.250
10  D 26-01-2014 105.125

(数据集首先按ID因素排序,然后按每个因素的日期排序。)

这就是我需要的:名为"Order"的新变量。

   ID       Date   Value Order
1   A 01-01-2014   2.500     1
2   A 05-01-2014   3.400     2
3   A 06-01-2014   2.500     3
4   B 01-01-2014 305.660     1
5   B 12-01-2014 300.000     2
6   C 25-01-2014  55.010     1
7   D 06-01-2014 205.320     1
8   D 12-01-2014  99.990     2
9   D 25-01-2014 210.250     3
10  D 26-01-2014 105.125     4

最终目标是根据变量"ORDER"重塑数据,如下所示:

library(reshape)
goal<-reshape(mydata2, 
              idvar="ID",
              timevar="Order",
              direction="wide")
goal

   ID     Date.1  Value.1     Date.2  Value.2     Date.3  Value.3     Date.4  Value.4
1  A  01-01-2014    2.50  05-01-2014    3.40  06-01-2014    2.50        <NA>      NA
4  B  01-01-2014  305.66  12-01-2014  300.00        <NA>       NA       <NA>      NA
6  C  25-01-2014   55.01        <NA>      NA        <NA>       NA       <NA>      NA
7  D  06-01-2014  205.32  12-01-2014   99.99  25-01-2014   210.25   26-01-2014 105.125

或者有没有其他方法可以在不使用"Order"变量的情况下像这样重塑数据?

推荐答案

这正是我的"SplitstackShape"包中的getanID函数的作用:

> library(splitstackshape)
> getanID(mydata, "ID")
    ID       Date   Value .id
 1:  A 01-01-2014   2.500   1
 2:  A 05-01-2014   3.400   2
 3:  A 06-01-2014   2.500   3
 4:  B 01-01-2014 305.660   1
 5:  B 12-01-2014 300.000   2
 6:  C 25-01-2014  55.010   1
 7:  D 06-01-2014 205.320   1
 8:  D 12-01-2014  99.990   2
 9:  D 25-01-2014 210.250   3
10:  D 26-01-2014 105.125   4

或者,您可以探索"data.table"的开发版本,它以一种非常灵活的方式重新实现dcast,这将允许您在不需要生成"time"变量的情况下执行此转换。

这篇关于R:如何为每个级别(用于重塑)创建一个具有序号(按日期)的新变量。)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆