gpt4 book ai didi

R reshape 性能

转载 作者:行者123 更新时间:2023-12-04 16:59:53 26 4
gpt4 key购买 nike

编辑:在创建一个简单的示例 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

我想将其 reshape 为以下内容:
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 绑定(bind),然后是 Date3、Balance3 等等,直到我得到我的 700ish 变量。

我正在考虑写一个循环,有什么想法吗?请参阅下面的示例数据。

提前致谢,

罗伯特
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))

最佳答案

如果您的列按照您在示例中提供的名称命名,您可以尝试 merged.stack来自我的“splitstackshape”包。请注意,“ID”列中的值必须是唯一的才能正常工作(因为它们在您的示例数据中)。

用法很简单:指定变量的“ stub ”(此处为“日期”和“余额”)。设置sep = "var.stubs"只是去掉列名的其余部分。 [, .time_1 := NULL]只是删除在 reshape 过程中创建的时间列。

library(splitstackshape)
merged.stack(mydf, var.stubs = c("Date", "Balance"),
sep = "var.stubs")[, .time_1 := NULL][]
# ID Date Balance
# 1: 1 01-01-2014 10000
# 2: 1 01-02-2014 5000
# 3: 2 01-01-2014 50000
# 4: 2 01-02-2014 30000
# 5: 3 01-01-2014 30000
# 6: 3 01-02-2014 15000
# 7: 4 01-01-2014 5000
# 8: 4 01-02-2014 3500

很快(“data.table”的 1.9.8 版) melt将能够像您尝试到达这里一样处理转换为半长形式。那会比 merged.stack 快目前是,但是 merged.stack应该已经能够处理您目前的情况。

关于R reshape 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com