在许多试验中删除重复的循环R.

时间:2015-07-03 18:51:08

标签: r loops duplicates

我有一个数据集(称为 eyeData ),在很短的版本中如下所示:

sNumber runningTrialNo  wordTar                             
1       1               vital       
1       1               raccoon                             
1       1               vital                               
1       1               accumulates                             
1       2               tornado                             
1       2               destroys                                
1       2               tornado                             
1       2               destroys                                
1       2               property                                
4       51              denounces                               
4       51              brings                              
4       51              illegible                               
4       51              frequently                              
4       51              brings                          
4       61              cerebrum
4       61              vital
4       61              knowledge
4       61              vital
4       61              cerebrum

我写了一个循环来分别删除每个试用版的 wordTar 列的所有重复项(相同的单词),因此数据看起来像这样:

   sNumber  runningTrialNo  wordTar                             
1           1               vital       
1           1               raccoon                         
1           1               accumulates                             
1           2               tornado                             
1           2               destroys                                
1           2               property                                
4           51              denounces                               
4           51              brings                              
4           51              illegible                               
4           51              frequently                  
4           61              cerebrum
4           61              vital
4           61              knowledge
4           61              cerebrum                        

以下是代码:

for (sno in eyeData$sNumber) {
for(trial in eyeData$runningTrialNo) {
ss <- subset(eyeData, sNumber == sno & runningTrialNo == trial)
ss.s <- ss[!duplicated(ss$wordTar), ]
 }
}

然而,它运行了很长时间,所以我关闭它...因为我是R环境的新手,我的猜测是我做了一个循环错误。有没有办法改善我的循环,所以它会给我一个理想的输出?

1 个答案:

答案 0 :(得分:1)

在R中,For循环通常较慢。通常需要vectorize your code。有很多方法可以做,这是使用库dplyr

的示例
library(dplyr)
eyeData %>% group_by(runningTrialNo) %>%
            distinct(wordTar)

使用microbenchmark我们可以看到更快,更快,我们运行代码100次并查看需要多长时间:

library(microbenchmark)

microbenchmark(dplyr = eyeData %>% group_by(runningTrialNo) %>%
                   distinct(wordTar), 
               old = for (sno in eyeData$sNumber) {
                       for(trial in eyeData$runningTrialNo) {
                           ss <- subset(eyeData, sNumber == sno & runningTrialNo == trial)
                           ss.s <- ss[!duplicated(ss$wordTar), ]
                       }
                   })

Unit: milliseconds
  expr        min         lq       mean     median         uq       max neval
 dplyr   1.256438   1.287158   1.567518   1.495092   1.550579  12.29212   100
   old 102.203029 110.265423 112.664063 111.789698 113.166710 304.58312   100