计算data.frame变量的唯一对之间的差异

计算data.frame变量的唯一对之间的差异,r,dataframe,plyr,apply,difference,R,Dataframe,Plyr,Apply,Difference,我有一个data.framedata: Sector Var1 Var2 Var3 Abcd 1 1 1 Efgh 4 5 6 Ijkl 7 8 9 我想创建一个新的data.frame,它包含每个变量的扇区的每个唯一配对之间的差异。预期结果的示例如下所示: # result Sector1 Sector2 Dif_Var1 Dif_Var2 Dif_Var3 Abcd Efgh 3 4 5

我有一个data.frame
data

Sector Var1 Var2 Var3
Abcd    1    1    1
Efgh    4    5    6
Ijkl    7    8    9
我想创建一个新的data.frame,它包含每个变量的
扇区
的每个唯一配对之间的差异。预期结果的示例如下所示:

# result
Sector1 Sector2 Dif_Var1 Dif_Var2 Dif_Var3
Abcd    Efgh        3        4        5
Abcd    Ijkl        6        7        8
Efgh    Ijkl        3        3        3
我可以找到
扇区
的每个唯一对(下面的代码),但我不确定这是否是继续的方法。下面这个最小的伪代码似乎是一个合适的、可能成功的途径吗

# pseudo code
result <- which(Sector1 == Sector) get Var1,2,3 values - which(Sector2 == Sector) get Var1,2,3 values
#伪代码

结果您可以使用您创建的
V1
V2
向量索引
df

df[data$V2, -1] - df[data$V1, -1]
#    Var1 Var2 Var3
#2      3    4    5
#3      6    7    8
#3.1    3    3    3
保留姓名

cbind(data$V1, data$V2, df[data$V2, -1] - df[data$V1, -1])
#    data$V1 data$V2 Var1 Var2 Var3
#2      Abcd    Efgh    3    4    5
#3      Abcd    Ijkl    6    7    8
#3.1    Efgh    Ijkl    3    3    3

使用sqldf包:

library(sqldf)
sqldf("select A.Sector Sector1,
              B.Sector Sector2,
              B.Var1 - A.Var1 Var1, 
              B.Var2 - A.Var2 Var2, 
              B.Var3 - A.Var3 Var3
              from df A join df B
              on A.Sector < B.Sector")
这也可以写成:

 nms <- names(df)[-1]
 sel <- toString( sprintf('B.%s - A.%s %s', nms, nms, nms) )
 fn$sqldf("select A.Sector Sector1, B.Sector Sector2, $sel 
           from df A join df B 
           on A.Sector < B.Sector")
nms
  Sector1 Sector2 Var1 Var2 Var3
1    Abcd    Efgh    3    4    5
2    Abcd    Ijkl    6    7    8
3    Efgh    Ijkl    3    3    3
 nms <- names(df)[-1]
 sel <- toString( sprintf('B.%s - A.%s %s', nms, nms, nms) )
 fn$sqldf("select A.Sector Sector1, B.Sector Sector2, $sel 
           from df A join df B 
           on A.Sector < B.Sector")