我有一些投资组合和模拟股票数据,并且正在寻找一种将它们相加的方法。尝试使用vlookups在excel中执行此操作,但是因为内存丢失而崩溃,所以我尝试使用R.以下是一些示例数据:
> p1 = c("a", "b", "c")
> p2 = c("d", "e", "f")
>p3 = c("a", "b", "c", "d", "e", "f")
> s1 = c(1,2,3,4,5,6)
> s1 = c(2,3,4,5,6,7)
> p = rbind(p1, p2)
> s = cbind(s1, s2)
> colnames(p)= c("Stock1", "Stock2", "Stock3")
> rownames(s) = p3
> p
Stock1 Stock2 Stock3
p1 "a" "b" "c"
p2 "d" "e" "f"
> s
s1 s2
a 1 2
b 2 3
c 3 4
d 4 5
e 5 6
f 6 7
我希望得到像这样的输出
p1 "a" "b" "c" 6 9
p2 "d" "e" "f" 15 18
希望创建一个像这样的矩阵
i=1
stocksim = null
while (i < ncol(s)) {
simsum = sum(s[p$stock1,i],s[p$stock2,i],s[p$stock3,i])
stocksim = cbind(stocksim,simsum)
i=i+1
}
然后将其绑定到我的p数据框。
我收到此错误,Error in p$stock1 : $ operator is invalid for atomic vectors
请让我知道你的想法。谢谢,
答案 0 :(得分:1)
尝试:
p<-cbind(as.data.frame(p,stringsAsFactors=F),t(sapply(1:nrow(p),function(x){colSums(s[p[x,],])})))
p
# Stock1 Stock2 Stock3 s1 s2
# p1 a b c 6 9
# p2 d e f 15 18
它的作用如下:
详细说明:as.data.frame(p,stringsAsFactors=F)
将p转换为数据帧并将字符值保存为字符串,而不是因子。 t(sapply(1:nrow(p),function(x){colSums(s[p[x,],])}))
是p(1:nrow(p)
)的每一行获取s(colSums
)子集的列(s[p[x,],]
)之和的函数。输出应该是t
ransposed。然后,您追加(cbind
)原始p和新值。