Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ';随机';心理学研究中的条件排序_R_Sorting_Random_Random Sample - Fatal编程技术网

R ';随机';心理学研究中的条件排序

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,但到目前为止,没有任何软件包能解决这个问题。我认为有一千种方法可以解决这个问题,其中没有一种可能非常漂

在我的心理学实验中,我有词刺激的配价类别

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,但到目前为止,没有任何软件包能解决这个问题。

我认为有一千种方法可以解决这个问题,其中没有一种可能非常漂亮。我写了一个小函数,负责排序。这有点粗糙,但它似乎对我尝试的东西有效

为了解释我所做的工作,函数的工作原理如下:

  • 取价向量并从中取样
  • 如果发现序列大于所需长度,则(对于每个这样的序列),在“其他地方”取该序列的最后一个值
  • 检查问题是否已解决。如果是,则返回重新排序的向量。如果没有,则返回到2


  • 我认为有一千种方法可以做到这一点,其中没有一种可能非常漂亮。我写了一个小函数,负责排序。这有点粗糙,但它似乎对我尝试的东西有效

    为了解释我所做的工作,函数的工作原理如下:

  • 取价向量并从中取样
  • 如果发现序列大于所需长度,则(对于每个这样的序列),在“其他地方”取该序列的最后一个值
  • 检查问题是否已解决。如果是,则返回重新排序的向量。如果没有,则返回到2


  • 我相信这个循环将适当地设置配价类别。我称之为配价类别

    #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)
       }
    }