R : replace elements in different columns after multiple comparisons

标签 r if-statement

我有一个原始调查数据 df,其中包含来自 5 个人的 7 项内容。每个人的一项(不是同一项)是比较的对象。向量vec表示该项目的位置。此外,还有两个矩阵 prob1 prob2 用于比较。比较是,如果随机值低于与 prob1 中的项目相同位置的值,则原始调查响应将替换为 9。如果随机值介于 中的值之间>prob1prob2,原始调查响应替换为 99。

在下面的示例中,对于第一个受访者,第 3 项的响应(3)是比较的主题。 prob1prob2 的对应值为 .103.781。由于第一受访者的随机数 .482 介于这两个值之间,因此第一受访者的初始数据需要替换为 99。

我当然可以使用 for 循环来做到这一点,但速度很慢。我尝试使用 sapply 函数,但我确实没有得到正确的解决方案。有什么建议么?谢谢!

set.seed(100)
df<-as.data.frame(matrix(sample(c(1:4),35,replace=T),nrow=5))
vec<-c(3,5,2,3,1)
set.seed(1)
prob1<-round(matrix(runif(35,0,.5), nrow=5),3)
set.seed(2)
prob2<-round(matrix(runif(35,.51,1), nrow=5),3)
ran<-c(.482, .298, .115, .163, .644)

> df
   V1 V2 V3 V4 V5 V6 V7
 1  2  2  3  3  3  1  2
 2  2  4  4  1  3  4  4
 3  3  3  2  2  3  4  2
 4  1  3  3  2  3  3  4
 5  3  1  4  3  2  2  3
> prob1
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]
[1,] 0.133 0.449 0.103 0.249 0.467 0.193 0.241
[2,] 0.186 0.472 0.088 0.359 0.106 0.007 0.300
[3,] 0.286 0.330 0.344 0.496 0.326 0.191 0.247
[4,] 0.454 0.315 0.192 0.190 0.063 0.435 0.093
[5,] 0.101 0.031 0.385 0.389 0.134 0.170 0.414
> prob2
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]
[1,] 0.601 0.972 0.781 0.928 0.834 0.749 0.515
[2,] 0.854 0.573 0.627 0.988 0.700 0.583 0.591
[3,] 0.791 0.918 0.883 0.621 0.920 0.685 0.907
[4,] 0.592 0.739 0.599 0.728 0.584 0.982 0.936
[5,] 0.972 0.779 0.709 0.547 0.680 0.575 0.762

最佳答案

如果我理解正确,您正在尝试访问以下索引

idx <- cbind(seq_along(vec),c(vec))

并且您想要更改 df 其中

ind99 <- ran < prob2[idx] 
ind09 <- ran < prob1[idx] 

所以

df[idx[ind99,]] <- 99
df[idx[ind09,]] <-  9
  V1 V2 V3 V4 V5 V6 V7
1  2  2 99  3  3  1  2
2  2  4  4  1 99  4  4
3  3  9  2  2  3  4  2
4  1  3  9  2  3  3  4
5 99  1  4  3  2  2  3

关于R : replace elements in different columns after multiple comparisons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350661/

相关文章:

c++ - 程序跳过 if 语句

r - 是否可以在命令行中将代码通过管道传递给 R 或 R 脚本?

linux - 如果目录没有文件那么... - Linux

excel - 如果 cell.value A = x,则 cell.value N = 公式

R difftime 输出根据输入格式而不同(as.character() 包装器与没有包装器)

java - 使用if else语句扫描并打印奇数和偶数

java - 正则表达式 if 语句与 switch 语句混合

r - 为 R 安装 data.table 时出现问题

r - 在 R 中使用 gganimate 创建绘图动画的问题

r - 根据背景颜色将颜色映射到ggplot中的标签