【发布时间】:2015-04-18 04:51:54
【问题描述】:
编辑:在创建一个简单的示例 data.frame 时,我为两个 Date 列使用了相同的日期,但事实并非如此,这使得这个问题变得更加困难。
而不是这个数据框:
ID Date Balance Date2 Balance2
1 01-01-2014 10000 01-02-2014 5000
2 01-01-2014 50000 01-02-2014 30000
3 01-01-2014 30000 01-02-2014 15000
4 01-01-2014 5000 01-02-2014 3500
我有这个数据框:
ID Date Balance Date2 Balance2
1 01-01-2014 10000 01-02-2017 5000
2 01-01-2015 50000 01-02-2016 30000
3 01-08-2014 30000 01-02-2015 15000
4 01-02-2016 5000 01-02-2018 3500
我想将其重塑为以下内容:
ID Date Balance
1 01-01-2014 10000
1 02-02-2017 5000
2 01-01-2015 50000
2 01-02-2016 30000
3 ... ... And so on...
我现在有以下内容。
Dates = a character containing all the columns with Dates (Date, Date2, Date3...)
Balances = a character containing all the columns with Balances (Balance1, Balance2...)
df <- reshape(df,
varying = Balances,
v.names = "Balance"
timevar = "Date"
times = Dates,
direction = "long")
当我更改示例 data.frame / data.table 时,您提出的出色方法的结果并没有让我得到结果。
主要问题是我在日期列中有不同的日期,我无法更改它。但 Date1 - Date2 - Date3 始终按时间顺序排列。
我需要一种 R 理解它需要获取 Date 列和 Balance 列的方式,将其放在新的 DF 中,然后获取 Date2 和 Balance2,将它们与第一个 DF 绑定,然后是 Date3、Balance3 等等,直到我得到我的 700 个变量。
我正在考虑写一个循环,有什么想法吗?请参阅下面的示例数据。
提前致谢,
罗伯特
df <- data.frame(ID=seq(1:4),
Date= c("01-01-2014","01-01-2015","01-08-2014","01-02-2016"),
Balance = c(10000,50000,30000,5000),
Date2= c("01-02-2017","01-02-2016","01-02-2015","01-02-2018"),
Balance2 = c(5000,30000,15000,3500))
【问题讨论】:
-
我无法对您的具体问题发表评论,但我强烈建议您切换到
reshape2,它提供了极大改进的 API,并在 C++ 中实现,具有潜在的显着性能改进。 -
@RobertLuyt,请参阅我的编辑。让我知道它是否适合您。
标签: r performance reshape