【发布时间】:2016-04-13 09:41:24
【问题描述】:
假设我有一个数据框,它是 1 到 20 的序列与自身的叉积:
a <- seq(1,20,1)
combis <- expand.grid(a,a)
colnames(combis) <- c("DaysBack","DaysForward")
所以数据看起来像:
DaysBack DaysForward
1 1
2 1
...
19 20
20 20
我想应用一个函数,该函数将天数往前,再往前数天,并返回几个值,然后将这些作为列添加到此数据框中。所以我的函数看起来像:
## operation to apply on each row
do_something <- function(days_back, days_forward)
{
# logic to work out some values
...
# return those values
c(value_1, value_2, value_3)
}
然后将其添加到原始数据框中,因此“combis”应如下所示:
DaysBack DaysForward Value1 Value2 Value3
1 1 5 6 7
2 1 4 2 3
...
19 20 1 9 3
20 20 2 6 8
如何执行此操作并取回数据框。
编辑:
我的 do_something 函数目前在两个值上运行,days_back 和 days_forward。它在另一个名为 pod 的数据帧的上下文中使用这些,它(在本例中)看起来像:
Date Price
2016-01-01 3.1
2016-01-02 3.33
...
2016-04-12 2.12
现在假设我传入 days_back=1 和 days_forward=2,我所做的是为每一行找到 1 天前的价格和 2 天后的价格向前,然后我将其作为名为 Diff 的列添加到数据中。我通过添加适当的超前/滞后列来做到这一点(我发现 shift 代码在这里What's the opposite function to lag for an R vector/dataframe?),所以我没有做任何循环。一旦我得到每行的差异,我计算 Diff 的平均值和标准偏差并返回这两个值。 IE。对于 days_back=1 和 days_forward=2 的组合,我有一些平均值和差异的标准差。现在我想要 days_back 和 days_forward 的所有组合,每个组合的范围从 1 到 20。在我第一次提出问题时给出的示例数据中,mean_diff 将对应于 Value1,而 sd_diff 将对应于 Value2,例如
所以要清楚,目前我的 do_something 直接对两个值而不是两组列向量进行操作。我确信它可以被重写以对两个向量进行操作,但是我又遇到了同样的问题,因为我不知道如何返回这些数据,所以最后我得到一个看起来像什么的数据框我在上面显示为我的目标输出。
谢谢
【问题讨论】:
标签: r dataframe data.table plyr