R:如何为每个级别(用于重塑)创建一个具有序号(按日期)的新变量。) [英] R: How can I make a new Variable with numbers of order (by date) for every level (for reshaping).)
本文介绍了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屋!
查看全文