2016-04-06 24 views
0

Her biri farklı sayıda öğeden oluşan 10 listeden oluşan 1 sütun içeren bir veri çerçevem ​​var. İçinde 10 farklı değer bulunan bir vektör var (10 tamsayı).R Bir liste listesini bir çarpı ile çarpmak

Her 10 listenin "sumproduct" değerini karşılık gelen vektör değeriyle almak ve 10 değeriyle sonuçlandırmak istiyorum.

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) 

Yıllardır temsil eden sayılar listeleri içeren dataframe üreten bir işlevi vardır. Dataframe, her bir değeri üretmek ve ardından veri ile birlikte değeri satırlara bağlamak için bir döngü kullanılarak düzenlenir. Benim vektör benziyorsa

http://pastebin.com/J6phR2hv

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

[1,2,3,4 ..., 10], ben çıkışını istiyorum:

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)) 
} 

sonuç şudur olmak üzere: Son Cevap = [(1 * 1.1342466 + 1 * 0.6342466 + 1 * 0.1342466), (2 * 1.3835616 + 2 * 0.8835616 + 2 * 0.3835616), ..., (... + 10 * 0.0630137)]

+1

Lütfen örnek veriniz. DF <- data.frame (var = I (liste (1: 3,2: 4,3: 5))) 've' vec <- 1: 3' gibi bir şey midir? Lütfen gerçek verileri ve beklenen sonuçları gösterin. – thelatemail

cevap

1

Listedeki her bir değeri ilgili skaler ile çarpmak istediğinizi varsayalım ve sonra hepsini ekleyin, işte bunu yapmanın bir yoludur.

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

Mükemmel çalıştı, teşekkür ederim. Yapabilirim Hızlı soru sorma: İki nesneyi, çalışmaz hale getirmek için aynı veri çerçevesine yüklemek neden gereklidir? Yapmadığımda, bunun yerine 10x10 matris elde ediyorum. – user3338639

+0

Gerekli değil; Sadece açıklık için yapıyordum. Hala 'mapply (liste1, vec1, FUN = işlev (x, y) {y * toplam (x)})' '[1] 10 36 72 112 150 180 196 192 162 100' – Eugene

İlgili konular