【问题标题】:R Multiplying a list of lists with a vectorR将列表列表与向量相乘
【发布时间】:2016-04-06 05:07:59
【问题描述】:

我有一个包含 1 列的数据框,其中包含 10 个列表,每个列表都有不同数量的元素。我还有一个包含 10 个不同值的向量(10 个整数)。

我想取每 10 个列表的“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)]

【问题讨论】:

  • 请给出示例数据。是不是类似于 df &lt;- data.frame(var=I(list(1:3,2:4,3:5))) 和 vec &lt;- 1:3 ?请显示实际数据和预期结果。

标签: r vector dataframe multiplication


【解决方案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

【讨论】:

  • 完美运行,谢谢。如果可以的话,请快速提问:为什么必须将两个对象加载到同一个数据框中才能使 mapply 工作?如果不这样做,我会得到一个 10x10 矩阵。
  • 没必要;我只是为了清楚起见。我仍然得到mapply(list1, vec1, FUN = function(x, y) {y* sum(x)})`[1] 10 36 72 112 150 180 196 192 162 100`
猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
相关资源
最近更新 更多