时间序列数据列标题上的笛卡尔积

时间:2018-03-13 16:03:36

标签: r

假设我有一个像

这样的数据框
d <- c("03-12-2018","03-11-2018")
g <- c(10,5)
p <- c(8,9)
a <- c(7,2)
df <- data.frame(d,g,p,a)
colnames(df) <- c("date","grapes","pears","apples")

df
        date grapes pears apples
1 03-12-2018     10     8      7
2 03-11-2018      5     9      2

我基本上希望输出看起来像:

date        grapes_pears    grapes_apples    pears_apples
3-12-2018   2               3                1    
3-11-2018   -4              3                7 

因此,输出表中的值只是列中第一个水果和第二个水果之间的差异。标题上的基本笛卡尔积(ex日期列)很好......我知道我会反过来接受对(grape_pears,pears_grapes),只是改变了价值的标志,还有grape_grapes的情况,但现在还可以。稍后会改进。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以尝试combn(),即

combn(names(df[-1]),2, FUN = function(i) Reduce(`-`, df[i]))

给出,

     [,1] [,2] [,3]
[1,]    2    3    1
[2,]   -4    3    7