r - 使用 purrr modify2 根据两个向量的元素修改一个向量
问题描述
我正在尝试根据使用两个不同向量的两个条件修改向量中的值,并且purrr::modify2
语法不完全正确,并且无法在网络上找到示例。这是mwe:
library(tidyverse)
library(magrittr)
arr1 <- c(6, 2, 3, 2, 1, 5, 4, 2, 3, 7)
arr2 <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
prob <- c(0.65, 0.45)
arr1 %<>% modify2(arr1,
arr2,
~ if (.x == 2 & .y == 0) ~ rbinom(1,1,prob[1]) * 2
else
if (.x == 2 & .y != 0) ~ rbinom(1,1,prob[2]) * 2)
我试图让它找到何时.x == 2
和.y == 0
(两个数组中的相同索引),然后用生成的值替换 .x 中的 2 rbinom(1,1,prob[1]) * 2
,我认为应该是 0 还是 2?然后如果.x == 2
和.y != 0
,使用不同的概率来替换 中的值arr1
。我还希望为每个条目单独完成 rbinom 计算,如果这有意义吗?我是否需要使用function (x) ......
符号来评估每个实例?显然更简单和/或更优雅的解决方案最受欢迎。谢谢。Ĵ
解决方案
一种可能的解决方案是使用case_when
:
arr1 <- modify2(arr1, arr2, ~dplyr::case_when(
.x == 2 && .y == 0 ~ rbinom(1,1,prob[1]) * 2,
.x == 2 && .y != 0 ~ rbinom(1,1,prob[2]) * 2,
TRUE ~ .x ))
请注意,您不需要%<>%
; 您已经arr1
作为第一个参数传递,因此您可以简单地将结果用标准<-
.
推荐阅读
- c# - 如何从以变量为键的 DataTable 生成 JSON
- ms-access - Access 数据库超过 5000 个项目,因此在 SharePoint 中不起作用
- apache-spark - spark-submit --files hdfs://file 缓存在驱动程序的 /tmp 中
- selenium - 在appium中获取数据提供者异常
- spring - Spring 集成 http-inbound-gateway / RequestMappingHandlerMapping
- javascript - 如果其他元素具有该类,如何停止将类添加到元素中?
- javascript - 循环 JSON 对象以检查给定值是否存在
- javascript - 如何从javascript转换维恩图代码