R ';随机';心理学研究中的条件排序
在我的心理学实验中,我有词刺激的配价类别 1=负,2=中性,3=正 我需要用伪随机条件对成千上万的刺激进行排序 Val_类别一行中不能有超过2个相同价刺激,即一行中不超过2个负刺激 例如-2,2,2=不可接受 2,2,1=正常 我无法对数据进行排序,即决定整个实验将是1,3,2,3,1,3,2,3,2,1,因为我不允许有模式R ';随机';心理学研究中的条件排序,r,sorting,random,random-sample,R,Sorting,Random,Random Sample,在我的心理学实验中,我有词刺激的配价类别 1=负,2=中性,3=正 我需要用伪随机条件对成千上万的刺激进行排序 Val_类别一行中不能有超过2个相同价刺激,即一行中不超过2个负刺激 例如-2,2,2=不可接受 2,2,1=正常 我无法对数据进行排序,即决定整个实验将是1,3,2,3,1,3,2,3,2,1,因为我不允许有模式 我尝试了各种软件包,如dylpr、sample、order、sort,但到目前为止,没有任何软件包能解决这个问题。我认为有一千种方法可以解决这个问题,其中没有一种可能非常漂
我尝试了各种软件包,如dylpr、sample、order、sort,但到目前为止,没有任何软件包能解决这个问题。我认为有一千种方法可以解决这个问题,其中没有一种可能非常漂亮。我写了一个小函数,负责排序。这有点粗糙,但它似乎对我尝试的东西有效 为了解释我所做的工作,函数的工作原理如下:
我认为有一千种方法可以做到这一点,其中没有一种可能非常漂亮。我写了一个小函数,负责排序。这有点粗糙,但它似乎对我尝试的东西有效 为了解释我所做的工作,函数的工作原理如下:
我相信这个循环将适当地设置配价类别。我称之为配价类别
#Generate example data
s1 = data.frame(id=c(1:10),treat=NA)
#Setting the first two rows
s1[1,"treat"] <- sample(1:3,1)
s1[2,"treat"] <- sample(1:3,1)
#Looping through the remainder of the rows
for (i in 3:length(s1$id))
{
s1[i,"treat"] <- sample(1:3,1)
#Check if the treat value is equal to the previous two values.
if (s1[i,"treat"]==s1[i-1,"treat"] & s1[i-1,"treat"]==s1[i-2,"treat"])
#If so draw one of the values not equal to that value
{
a = 1:3
remove <- s1[i,"treat"]
a=a[!a==remove]
s1[i,"treat"] <- sample(a,1)
}
}
#生成示例数据
s1=数据帧(id=c(1:10),treat=NA)
#设置前两行
s1[1,“treat”]我相信这个循环将适当地设置价类别。我称之为配价类别
#Generate example data
s1 = data.frame(id=c(1:10),treat=NA)
#Setting the first two rows
s1[1,"treat"] <- sample(1:3,1)
s1[2,"treat"] <- sample(1:3,1)
#Looping through the remainder of the rows
for (i in 3:length(s1$id))
{
s1[i,"treat"] <- sample(1:3,1)
#Check if the treat value is equal to the previous two values.
if (s1[i,"treat"]==s1[i-1,"treat"] & s1[i-1,"treat"]==s1[i-2,"treat"])
#If so draw one of the values not equal to that value
{
a = 1:3
remove <- s1[i,"treat"]
a=a[!a==remove]
s1[i,"treat"] <- sample(a,1)
}
}
#生成示例数据
s1=数据帧(id=c(1:10),treat=NA)
#设置前两行
s1[1,“处理”]这里的一个问题可能是用户无法控制结果价向量的合成。碰巧,某个价态条件可能会从实验中消失。@SimonG同意,但这只会是一个非常小的样本的问题(因为我提供了一个N=10的例子,这一点很好)。这里的问题可能是用户无法控制结果价态向量的比较。碰巧,某个价态条件可能会从实验中消失。@SimonG同意,尽管这只会是一个非常小的样本的问题(因为我提供了一个N=10的例子,这一点很好)。哇,谢谢!那代码有点超出我的理解力。您是否可以对每一行进行注释,解释它的作用,以便我可以向主管解释?我在相关代码行中添加了进一步的注释。这有用吗?是的,帮了大忙!我正在尝试解决如何输出一个完整的数据帧,并按顺序输出其他列“Word、Wd_ID、Test、Set”?我该怎么做?你可以通过给向量赋值来实现。我更新了我的答案,展示了命名向量会发生什么,以及如何使用它对数据帧中的行进行伪随机。如果这解决了你的问题,别忘了投票/接受:)哇,谢谢!那代码有点超出我的理解力。您是否可以对每一行进行注释,解释它的作用,以便我可以向主管解释?我在相关代码行中添加了进一步的注释。这有用吗?是的,帮了大忙!我正在尝试解决如何输出一个完整的数据帧,并按顺序输出其他列“Word、Wd_ID、Test、Set”?我该怎么做?你可以通过给向量赋值来实现。我更新了我的答案,展示了命名向量会发生什么,以及如何使用它对数据帧中的行进行伪随机。如果这解决了您的问题,请不要忘记投票/接受:)
# reorder a data.frame using a named vector
dat <- data.frame(val=rep(1:3,each=5), stim=rep(letters[1:5],3))
val <- dat$val
names(val) <- 1:nrow(dat)
new.val <- pseudoRandomize(val, 2)
new.dat <- dat[as.integer(names(new.val)),]
# gives:
# val stim
# 5 1 e
# 2 1 b
# 9 2 d
# 6 2 a
# 3 1 c
# 15 3 e
# ...
#Generate example data
s1 = data.frame(id=c(1:10),treat=NA)
#Setting the first two rows
s1[1,"treat"] <- sample(1:3,1)
s1[2,"treat"] <- sample(1:3,1)
#Looping through the remainder of the rows
for (i in 3:length(s1$id))
{
s1[i,"treat"] <- sample(1:3,1)
#Check if the treat value is equal to the previous two values.
if (s1[i,"treat"]==s1[i-1,"treat"] & s1[i-1,"treat"]==s1[i-2,"treat"])
#If so draw one of the values not equal to that value
{
a = 1:3
remove <- s1[i,"treat"]
a=a[!a==remove]
s1[i,"treat"] <- sample(a,1)
}
}