【问题标题】:R condtional replace in a 3d array3d数组中的R条件替换
【发布时间】:2020-08-09 21:16:26
【问题描述】:

我想有条件地替换 3d 数组中特定向量中的值,替换值是概率计算中的值。由于某种原因,向量的所有值的替换值都是相同的,而不是在单个向量元素的基础上计算。我的语法一定有一些简单的错误

library (abind)
pop <- array(c (1,0,1,1,1,0,0,0,0,0,2,0,2,3,5), dim = c(1,5,3))
pop <- abind(pop,pop, along = 1)

所以我要处理的特定向量是

pop[dim(pop)[1], ,1]

[1] 1 0 1 1 1

我想要实现的是不理会零值,如果值为一,则运行随机二项式测试,看看它是否变为零,如果确实改变,则进行插入。有人告诉我 ifelse 是矢量化的,但是使用这种语法,它不能单独对矢量的每个元素进行操作。当我尝试生成一个新的向量时

ifelse (pop[dim(pop)[1], ,1] == 1, rbinom(1,1,0.5), 0)

我没有得到任何改变

> ifelse (pop[dim(pop)[1], ,1] == 1, rbinom(1,1,0.5), 0)
[1] 1 0 1 1 1

或者它会改变所有的值。

> ifelse (pop[dim(pop)[1], ,1] == 1, rbinom(1,1,0.5), 0)
[1] 0 0 0 0 0

我希望数组中的某些值会被更改,但不是“全有或全无”。我究竟做错了什么?此外,如果有一种简单优雅的方法可以将替换回原始 3d 数组,我将不胜感激。谢谢。 J

【问题讨论】:

    标签: r arrays replace conditional-statements


    【解决方案1】:

    我想我确实找到了使用 dplyr 包的“modify_if”功能的解决方案。

    pop[dim(pop)[1], ,1] %<>% modify_if(~ .x == 1, ~ rbinom(1,1,pliv1))
    

    HTH, 日

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-26
      • 2013-12-11
      • 2021-01-20
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多