【发布时间】:2016-02-11 21:44:22
【问题描述】:
我有一个原始调查数据df,其中包含来自 5 个人的 7 个项目。每个人的一个项目(不是同一项目)是比较的主题。一个向量vec 表示项目的位置。此外,还有两个矩阵 prob1 prob2 用于比较。比较的是,如果随机值低于与 prob1 中的项目在同一位置的值,则原始调查响应将替换为 9。如果随机值介于 prob1 和 prob2 的值之间,原始调查响应被替换为 99。
在下面的示例中,对于第一个响应者,第 3 项的响应,即3,是比较的主题。来自prob1 和prob2 的对应值为.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
【问题讨论】:
-
如果随机值大于
prob1和prob2,那么原始调查响应是否保持不变? -
是的。如果值大于两者,则无需执行任何操作。
标签: r if-statement