1896 Question
아쉽게도 zoo, xts class 의 데이터셋을 dplyr package 의 다양한 함수(mutate(), summarize(), group_by() 등)와 조화시켜 사용하려면 class 변형없이 사용하기엔 어려울 것 같습니다.
그럼에도 dplyr 패키지의 함수들을 사용하고자 한다면 dplyr 이 원하는 데이터 인풋 클래스인 tbl 과 호환되는 데이터형식으로 바꾸어야 합니다.
아래의 시뮬레이션 코드가 바로 그와 같은 케이스라고 볼 수 있습니다.
A) example data
# library(xts)
# library(zoo)
# library(dplyr)
index <- matrix(rnorm(300, 1000, 8^2), 100, 3)
data <- xts(round(index, 1), as.Date(16001:16100)) # xts package for time series data
names(data) <- paste("Fund", 1:3, sep="_")
data## Fund_1 Fund_2 Fund_3
## 2013-10-23 1176.7 1131.9 1114.9
## 2013-10-24 976.3 1058.2 1051.3
## 2013-10-25 994.4 1027.9 1080.2
## 2013-10-26 926.6 976.8 999.4
## 2013-10-27 1051.4 969.3 999.5
## 2013-10-28 1097.6 1028.5 983.3
## 2013-10-29 974.7 900.9 952.8
## 2013-10-30 961.0 1022.7 1080.6
## 2013-10-31 966.9 1065.4 1036.9
## 2013-11-01 979.8 932.4 1004.0
## 2013-11-02 1019.4 969.8 1012.7
## 2013-11-03 937.7 949.6 943.8
## 2013-11-04 1038.2 966.6 978.9
## 2013-11-05 983.2 999.8 1012.9
## 2013-11-06 917.5 859.4 1100.4
## 2013-11-07 993.2 1016.5 932.3
## 2013-11-08 868.3 969.1 971.8
## 2013-11-09 1031.9 974.4 1083.0
## 2013-11-10 979.9 964.6 998.6
## 2013-11-11 1085.4 1070.1 979.3
## 2013-11-12 1021.6 918.8 952.1
## 2013-11-13 995.2 930.9 986.7
## 2013-11-14 1050.1 1095.6 912.3
## 2013-11-15 951.7 1001.3 936.3
## 2013-11-16 923.8 1016.3 1073.8
## 2013-11-17 921.6 916.6 979.5
## 2013-11-18 1028.2 913.1 1115.3
## 2013-11-19 865.3 955.2 1020.0
## 2013-11-20 942.9 1030.6 938.3
## 2013-11-21 1153.7 1059.4 937.2
## 2013-11-22 1001.5 977.5 871.4
## 2013-11-23 1023.2 1016.1 964.3
## 2013-11-24 1007.7 1048.4 947.9
## 2013-11-25 973.6 1052.4 946.4
## 2013-11-26 1002.7 977.2 996.1
## 2013-11-27 992.9 996.7 978.6
## 2013-11-28 1054.9 973.2 1010.5
## 2013-11-29 1052.1 1063.6 980.3
## 2013-11-30 965.1 1053.7 1009.5
## 2013-12-01 985.3 1152.3 1045.6
## 2013-12-02 1089.0 989.6 950.6
## 2013-12-03 1082.1 1043.1 1014.4
## 2013-12-04 1085.6 1023.3 975.7
## 2013-12-05 974.8 1041.4 1015.9
## 2013-12-06 1099.1 1030.3 1006.1
## 2013-12-07 952.1 983.0 1077.0
## 2013-12-08 984.4 949.3 1087.8
## 2013-12-09 995.0 908.4 1022.5
## 2013-12-10 1074.8 1131.4 946.6
## 2013-12-11 1082.6 1050.3 1096.7
## 2013-12-12 1053.1 1037.9 1001.9
## 2013-12-13 1026.3 923.5 924.0
## 2013-12-14 1123.5 1003.9 971.4
## 2013-12-15 1064.6 951.4 972.0
## 2013-12-16 1047.0 913.5 1049.3
## 2013-12-17 990.4 1021.3 1116.0
## 2013-12-18 1043.1 992.7 789.0
## 2013-12-19 998.4 1034.0 946.9
## 2013-12-20 943.2 827.1 987.3
## 2013-12-21 996.5 1004.6 999.2
## 2013-12-22 1003.9 946.6 1091.1
## 2013-12-23 1083.9 1026.2 1096.9
## 2013-12-24 1036.5 923.7 951.3
## 2013-12-25 1056.3 1050.8 1046.8
## 2013-12-26 955.7 996.2 1080.0
## 2013-12-27 968.5 1000.3 1027.4
## 2013-12-28 961.1 1103.5 902.3
## 2013-12-29 871.8 917.2 1098.7
## 2013-12-30 1070.0 918.4 976.1
## 2013-12-31 989.0 1018.2 962.4
## 2014-01-01 1039.4 1068.5 950.1
## 2014-01-02 1028.6 1109.0 1019.6
## 2014-01-03 1034.4 932.0 969.8
## 2014-01-04 1084.5 923.6 1005.9
## 2014-01-05 1102.6 1024.1 1134.2
## 2014-01-06 1041.8 1012.9 943.2
## 2014-01-07 980.8 1020.9 1002.8
## 2014-01-08 1028.7 1174.8 1023.1
## 2014-01-09 994.0 950.5 1006.8
## 2014-01-10 992.7 975.1 993.6
## 2014-01-11 974.6 991.7 964.6
## 2014-01-12 1108.2 1054.2 992.2
## 2014-01-13 1101.6 1063.9 916.3
## 2014-01-14 1027.4 1026.2 1030.2
## 2014-01-15 979.6 979.3 985.5
## 2014-01-16 1001.1 894.6 954.3
## 2014-01-17 876.8 1007.5 1018.8
## 2014-01-18 1018.7 940.7 1079.9
## 2014-01-19 975.1 946.6 1072.0
## 2014-01-20 946.9 924.3 989.6
## 2014-01-21 987.8 1091.5 981.9
## 2014-01-22 1109.9 1103.7 1011.7
## 2014-01-23 1023.0 998.9 1025.0
## 2014-01-24 957.0 1041.3 946.5
## 2014-01-25 917.7 962.4 1026.9
## 2014-01-26 1043.2 969.2 1055.1
## 2014-01-27 972.2 958.1 1004.4
## 2014-01-28 1030.1 1027.7 994.1
## 2014-01-29 1002.6 1065.0 931.3
## 2014-01-30 1012.8 1014.7 1063.3
B) group_by date (Year + Month)
grp <- data %>% index %>% format("%y-%m")
as.data.frame(coredata(data)) %>%
mutate(group = grp) %>%
group_by(group) %>%
summarize(
mean_Fund_1 = mean(Fund_1),
mean_Fund_2 = mean(Fund_2),
mean_Fund_3 = mean(Fund_3)
)## # A tibble: 4 x 4
## group mean_Fund_1 mean_Fund_2 mean_Fund_3
## <chr> <dbl> <dbl> <dbl>
## 1 13-10 1013.9556 1020.1778 1033.2111
## 2 13-11 992.0767 988.9633 985.8067
## 3 13-12 1022.1806 997.2065 1007.3839
## 4 14-01 1013.1267 1008.4300 1003.0900