R 整齐数据行间差异的通用函数?

R 整齐数据行间差异的通用函数?,r,data.table,dplyr,tidyr,R,Data.table,Dplyr,Tidyr,我大致有以下data.frame: df <- structure(list(WK = c("W212015", "W212015", "W222015", "W222015", "W232015", "W232015", "W372016", "W372016", "W382016", "W382016", "W392016", "W392016"), YEAR = c(2015, 2015, 2015, 2015, 2015, 2015, 2016, 2016, 2016, 20

我大致有以下data.frame:

df <- structure(list(WK = c("W212015", "W212015", "W222015", "W222015", 
"W232015", "W232015", "W372016", "W372016", "W382016", "W382016", 
"W392016", "W392016"), YEAR = c(2015, 2015, 2015, 2015, 2015, 
2015, 2016, 2016, 2016, 2016, 2016, 2016), SEM = c("W21", "W21", 
"W22", "W22", "W23", "W23", "W37", "W37", "W38", "W38", "W39", 
"W39"), DEPTO = c("FARMA", "NO FARMA", "FARMA", "NO FARMA", "FARMA", 
"NO FARMA", "FARMA", "NO FARMA", "FARMA", "NO FARMA", "FARMA", 
"NO FARMA"), UNIDADES = c(1010, 1252, 1354, 1275, 1411, 1171, 
1057, 1362, 1435, 1120, 1451, 1140), VENTAS = c(128270, 172776, 
173312, 204000, 189074, 165111, 130011, 226092, 231035, 181440, 
220552, 197220)), .Names = c("WK", "YEAR", "SEM", "DEPTO", "UNIDADES", 
"VENTAS"), class = "data.frame", row.names = c(NA, -12L))

head(df)
  WK      YEAR SEM    DEPTO UNIDADES VENTAS
1 W212015 2015 W21    FARMA     1010 128270
2 W212015 2015 W21 NO FARMA     1252 172776
3 W222015 2015 W22    FARMA     1354 173312
4 W222015 2015 W22 NO FARMA     1275 204000
5 W232015 2015 W23    FARMA     1411 189074
6 W232015 2015 W23 NO FARMA     1171 165111

df也许这不是你想要的,但我猜:

library(data.table)
setDT(df)
df[,list(YOYDIFF = UNIDADES[YEAR==2016] / UNIDADES[YEAR==2015]), by=c('SEM','DEPTO')]
其中:

   SEM    DEPTO   YOYDIFF
1: W21    FARMA 1.0465347
2: W21 NO FARMA 1.0878594
3: W22    FARMA 1.0598227
4: W22 NO FARMA 0.8784314
5: W23    FARMA 1.0283487
6: W23 NO FARMA 0.9735269
开始数据集(修改为可用):


df您尝试了什么?你用哪个变量来计算YOYDIFF
?@ProlalistatusMaximus我实际上用Excel作为最小的例子。变量是UNIDADESCan您可以显示在
res
处获取
W21
0.10396040
的步骤吗?@Sotos我想我已经消除了混淆…是的,但是您提供的
df
没有必要的信息来生成所需的
res
。我们甚至不能在
df
应用公式……是的,我现在明白了。谢谢
   SEM    DEPTO   YOYDIFF
1: W21    FARMA 1.0465347
2: W21 NO FARMA 1.0878594
3: W22    FARMA 1.0598227
4: W22 NO FARMA 0.8784314
5: W23    FARMA 1.0283487
6: W23 NO FARMA 0.9735269
df <- structure(list(WK = c("W212015", "W212015", "W222015", "W222015", 
"W232015", "W232015", "W372016", "W372016", "W382016", "W382016", 
"W392016", "W392016"), YEAR = c(2015, 2015, 2015, 2015, 2015, 
2015, 2016, 2016, 2016, 2016, 2016, 2016), SEM = c("W21", "W21", 
"W22", "W22", "W23", "W23", "W21", "W21", "W22", "W22", "W23", 
"W23"), DEPTO = c("FARMA", "NO FARMA", "FARMA", "NO FARMA", "FARMA", 
"NO FARMA", "FARMA", "NO FARMA", "FARMA", "NO FARMA", "FARMA", 
"NO FARMA"), UNIDADES = c(1010, 1252, 1354, 1275, 1411, 1171, 
1057, 1362, 1435, 1120, 1451, 1140), VENTAS = c(128270, 172776, 
173312, 204000, 189074, 165111, 130011, 226092, 231035, 181440, 
220552, 197220)), .Names = c("WK", "YEAR", "SEM", "DEPTO", "UNIDADES", 
"VENTAS"), row.names = c(NA, -12L), class = "data.frame")