r - 将R中不同级别的列表相乘
问题描述
我想将列表中两个级别的数值乘以 R 中另一个列表中另一个级别的值。例如,考虑以下内容:
library(tidyverse)
library(purrr)
library(dplyr)
weights <- list(a = list(1, 3, 8), b = list(2, 4), c = list(5, 2, 8, 0.5))
multiplier <- list(0.5, 0.25, 0.10)
这是我想做的基本想法,但这不起作用.....
result <- weights * multiplier
我想生成一个列表,其结构与标题为“权重”的列表相同,但每个变量都乘以“乘数”列表中的值。
我想要的结果是:
result <- list(a = list(0.5, 1.5, 4), b = list(0.5, 1), c = list(0.5, 0.2, 0.8, 0.05))
我觉得这应该是一件相对容易的事情,但我似乎无法弄清楚。
解决方案
我们可以使用map2
循环遍历list
,并且由于“权重”是一个嵌套列表,unlist
它与“乘数”列表中的每个对应元素相乘,然后relist
返回list
library(purrr)
map2(weights, multiplier, ~ relist(unlist(.x) * .y, skeleton = .x))
中的类似选项base R
是Map
Map(function(x, y) relist(unlist(x) * y, skeleton = x), weights, multiplier)
或者另一种选择是将stack
其添加到两列data.frame,然后在rep
licating后进行乘法以使长度相同,然后relist
relist(with(stack(weights), values *
rep(unlist(multiplier), table(ind))), weights)
推荐阅读
- xpath - 在运行时设置可见性 = true 后,向导视图中的 Orbeon 部分不可点击
- android - 分页 PageKeyedDataSource 滑动以刷新调用 loadInitial
- django - Angular 5 Django CSRF 令牌
- c# - WPF/XAML - 绑定到 TextBox PreviewTextInput 事件
- scala - 如何在 Spark 中创建一个空的 dataFrame
- python - Python程序在网站上查找活动端口?
- javascript - 如何通过文本查找和替换列表项?
- c++ - 覆盖柯南存储目录
- spring - 在密码更改openldap spring中获取BadCredentialsException
- git - 在 Intellij 中 HEAD 和 HEAD 上游的版本控制日志中过滤分支