查找和求和模拟数据
Lookup and Sum simulated data
我有一些投资组合和模拟股票数据,正在寻找一种将它们相加的方法。试图在 excel 中使用 vlookups 执行此操作,但由于内存丢失而崩溃,所以我正在尝试使用 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
请告诉我您的想法。谢谢,
尝试:
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
它的作用如下:
- 鉴于您想要一些字符值和一些数值,您必须使用数据框
- 你对 s 的一个子集(包括你感兴趣的行)的列求和
- 你追加那些做原来的 p
详细说明:as.data.frame(p,stringsAsFactors=F)
将 p 转换为数据帧并将字符值保留为字符串,而不是因子。 t(sapply(1:nrow(p),function(x){colSums(s[p[x,],])}))
是对 p (1:nrow(p)
) 的每一行取 s (s[p[x,],]
) 子集的列 (colSums
) 之和的函数。输出应该是 t
ransposed。然后附加 (cbind
) 原始 p 和新值。
我有一些投资组合和模拟股票数据,正在寻找一种将它们相加的方法。试图在 excel 中使用 vlookups 执行此操作,但由于内存丢失而崩溃,所以我正在尝试使用 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
请告诉我您的想法。谢谢,
尝试:
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
它的作用如下:
- 鉴于您想要一些字符值和一些数值,您必须使用数据框
- 你对 s 的一个子集(包括你感兴趣的行)的列求和
- 你追加那些做原来的 p
详细说明:as.data.frame(p,stringsAsFactors=F)
将 p 转换为数据帧并将字符值保留为字符串,而不是因子。 t(sapply(1:nrow(p),function(x){colSums(s[p[x,],])}))
是对 p (1:nrow(p)
) 的每一行取 s (s[p[x,],]
) 子集的列 (colSums
) 之和的函数。输出应该是 t
ransposed。然后附加 (cbind
) 原始 p 和新值。