在以下问题上,我真的需要你的帮助:
我有两个数据框架--一个包含有ISIN和群集信息的证券组合。
> dfInput
TICKER CLUSTER SECURITY.NAME
1 LU0937588209 High Yield Prime Capital Access SA SICAV-
2 LU0694362343 High Yield ECM CREDIT FUND SICAV - ECM Hi
3 IE0030390896 High Yield Putnam World Trust - Global Hi
4 LU0575374342 EM Debt Ashmore SICAV - Emerging Marke
5 LU0493865678 EM Debt Ashmore SICAV - Emerging Marke
6 LU0972237696 EM Debt Galloway Global Fixed Income F
7 IE00B6TLWG59 ILS/CAT GAM Star Fund PLC - Cat Bond F
8 LU0816333396 ILS/CAT LGT Lux I - Cat Bond Fund
9 LU0879473352 L/S Credit Merrill Lynch Investment Solut
10 HINCFEF ID Equity L/S Credit Hedge Invest International Fun
11 FR0011034800 L/S Credit Schelcher Prince Opportunite E
12 PIMCSEI ID Equity L/S Credit PIMCO Funds Global Investors S
13 VTR US Equity REITs Ventas Inc
14 HCP US Equity REITs HCP Inc
15 VGSIX US Equity REITs Vanguard REIT Index Fund
16 NLY US Equity M REITs Annaly Capital Management Inc
17 CLNY US Equity M REITs Colony Financial Inc
18 AGNC US Equity M REITs American Capital Agency Corp
19 REM US Equity M REITs iShares Mortgage Real Estate C
20 ES0130960018 Infrastructure Equities Enagas SA
21 SDRL US Equity Infrastructure Equities Seadrill Ltd
22 IGF US Equity Infrastructure Equities iShares Global Infrastructure
23 KMP US Equity MLP Kinder Morgan Energy Partners
24 EPD US Equity MLP Enterprise Products Partners L
25 MLPI US Equity MLP ETRACS Alerian MLP Infrastruct
26 HTGC US Equity BDC Hercules Technology Growth Cap
27 TCPC US Equity BDC TCP Capital Corp
28 MAIN US Equity BDC Main Street Capital Corp
29 BDCS US Equity BDC ETRACS Linked to the Wells Far另一个包含这些证券的多个时间序列,以证券名称作为列名(数据来自excel文件)。
> PortfolioR.xts
Ventas.Inc HCP.Inc ....
2011-01-03 0.0000000000 0.0000000000
2011-01-04 -0.0117725362 -0.0056323067
2011-01-05 -0.0081155489 0.0018809625
2011-01-06 -0.0009479572 -0.0154202974
2011-01-07 -0.0058974774 -0.0054674822
2011-01-10 -0.0074691528 -0.0077050464
2011-01-11 -0.0036591278 0.0052348928
2011-01-12 0.0132249172 -0.0091097938
2011-01-13 0.0015220703 0.0085600412
2011-01-14 0.0058762372 -0.0038567541
2011-01-17 0.0000000000 0.0000000000
2011-01-18 0.0157513101 -0.0002760525
2011-01-19 -0.0059712810 -0.0074823683
2011-01-20 0.0013092679 0.0049944610
2011-01-21 0.0013075560 -0.0055509440
...现在如何根据组合中的集群信息拆分xts对象?
结果应该是为每个CLUSTER拥有一个单独的data.frame或xts对象,其中包含属于该集群的证券的返回历史。
这个是可能的吗?
谢谢你提前..。
发布于 2014-07-16 08:46:51
有一种方法可以做到:
setNames(lapply(unique(dfInput$CLUSTER), function(x) {
PortfolioR[, which(dfInput$CLUSTER[match(colnames(PortfolioR),
dfInput$SECURITY.NAME)] == x)]
}), unique(dfInput$CLUSTER))例如:
# Set up some fake data
d1 <- data.frame(grp=sample(LETTERS[1:4], 10, replace=TRUE),
name=letters[1:10])
d1
# grp name
# 1 A a
# 2 B b
# 3 B c
# 4 D d
# 5 C e
# 6 B f
# 7 B g
# 8 A h
# 9 D i
# 10 A j
d2 <- matrix(round(runif(50), 2), ncol=10)
colnames(d2) <- letters[1:10]
library(xts)
d2 <- xts(d2, seq.Date(as.Date('01-01-2011', '%d-%m-%Y'),
as.Date('5-01-2011', '%d-%m-%Y'), 1))
d2
# a b c d e f g h i j
# 2011-01-01 0.51 0.41 0.69 0.87 0.37 0.86 0.47 0.68 0.64 0.73
# 2011-01-02 0.72 0.92 0.53 0.55 0.62 0.54 0.75 0.64 0.04 0.72
# 2011-01-03 0.34 0.50 0.92 0.23 0.59 0.09 0.78 0.53 0.26 0.27
# 2011-01-04 0.52 0.47 0.49 0.25 0.18 0.07 0.65 0.13 0.46 0.74
# 2011-01-05 0.10 0.87 0.10 0.48 0.58 0.72 0.96 0.71 0.78 0.80
out <- setNames(sapply(unique(d1$grp), function(x) {
d2[, which(d1$grp[match(colnames(d2), d1$name)] == x)]
}), unique(d1$grp))
out
# $A
# a h j
# 2011-01-01 0.51 0.68 0.73
# 2011-01-02 0.72 0.64 0.72
# 2011-01-03 0.34 0.53 0.27
# 2011-01-04 0.52 0.13 0.74
# 2011-01-05 0.10 0.71 0.80
#
# $B
# b c f g
# 2011-01-01 0.41 0.69 0.86 0.47
# 2011-01-02 0.92 0.53 0.54 0.75
# 2011-01-03 0.50 0.92 0.09 0.78
# 2011-01-04 0.47 0.49 0.07 0.65
# 2011-01-05 0.87 0.10 0.72 0.96
#
# $C
# d i
# 2011-01-01 0.87 0.64
# 2011-01-02 0.55 0.04
# 2011-01-03 0.23 0.26
# 2011-01-04 0.25 0.46
# 2011-01-05 0.48 0.78
#
# $D
# e
# 2011-01-01 0.37
# 2011-01-02 0.62
# 2011-01-03 0.59
# 2011-01-04 0.18
# 2011-01-05 0.58如果希望列表元素(即xts对象)成为全局环境中的独立xts对象,则可以使用list2env。
list2env(out, globalenv())这将覆盖全局环境中与列表元素具有相同名称的任何对象(如上面示例中的A、B、C和D)。
https://stackoverflow.com/questions/24775621
复制相似问题