2016-04-06 54 views
0

我有一個數據幀,其中1列由10個列表組成,每列列表中有不同數量的元素。我也有一個有10個不同值的矢量(10個整數)。R將一列列表與一個向量相乘

我想將每個列表的「sumproduct」與其對應的向量值相加,最後得到10個值。

Value 1 = sumproduct(First list, First vector value) 
Value 2 = sumproduct(Second list, Second vector value) 
etc... 

Final_Answer <- c(Value 1, Value 2, ... , Value 10) 

我有一個函數可以生成包含表示年的數字列表的數據框。使用循環構造數據幀以生成每個值,然後將該值與數據幀一起進行行綁定。

Time_Function <- function(Maturity) 
{for (i in 0:Count) 
    {x<-as.numeric(((as.Date(as.Date(Maturity)-i*365)-Start_Date)/365) 
    Time <- rbind(Time, data.frame(x))} 
return((Time)) 
} 

結果是這樣的:

http://pastebin.com/J6phR2hv

http://i.imgur.com/Sf4mpA5.png

如果我的矢量看起來像[1,2,3,4 ...,10],我想輸出(1 * 1.1342466 + 1 * 0.6342466 + 1 * 0.1342466),(2 * 1.3835616 + 2 * 0.8835616 + 2 * 0.3835616),...,(... + 10 * 0.0630137)]: ]

+1

請給出示例數據。是否像'df < - data.frame(var = I(list(1:3,2:4,3:5)))'和'vec < - 1:3'?請顯示實際數據和預期結果。 – thelatemail

回答

1

假設您想要將列表中的每個值乘以相應的標量,然後將它們全部加起來,這裏有一種方法可以實現。

list1 <- mapply(rep, 1:10, 10:1) 
vec1 <- 1:10 

df <- data.frame(I(list1), vec1) 
df 
      list1 vec1 
1 1, 1, 1,.... 1 
2 2, 2, 2,.... 2 
3 3, 3, 3,.... 3 
4 4, 4, 4,.... 4 
5 5, 5, 5,.... 5 
6 6, 6, 6,.... 6 
7 7, 7, 7, 7 7 
8  8, 8, 8 8 
9   9, 9 9 
10   10 10 

mapply(df$list1, df$vec1, FUN = function(x, y) {y* sum(x)}) 

[1] 10 36 72 112 150 180 196 192 162 100 
+0

完美工作,謝謝。 快速的問題,如果我可能: 爲什麼有必要將兩個對象加載到同一個數據框中以供應用程序工作?當我不這樣做時,我得到一個10x10矩陣。 – user3338639

+0

這沒有必要;爲了清晰起見,我只是在做。我仍然得到 'mapply(list1,vec1,FUN = function(x,y){y * sum(x)})' '[1] 10 36 72 112 150 180 196 192 162 100' – Eugene