R 整齐数据行间差异的通用函数?
我大致有以下data.frame: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
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")