Hi,
Try:
set.seed(42)
dat1<- as.data.frame(matrix(sample(LETTERS,2*1e6,replace=TRUE),ncol=2))
dat2<- dat1[1:1e5,]
dat3<- dat1
library(data.table)
dt1<- data.table(dat1)
system.time(dat1$sat<- 1*(dat1[,1]==dat1[,2]))
#   user  system elapsed 
#  0.148   0.004   0.152 
library(car)
system.time({dat3$sat<- 1*(dat3[,1]==dat3[,2])
    dat3$sat<- recode(dat3$sat,'0="no flag";1="flag"')})
# user  system elapsed 
#  1.140   0.000   1.137 

head(dat3)
#  V1 V2     sat
#1  X  M no flag
#2  Y  K no flag
#3  H  W no flag
#4  V  E no flag
#5  Q  N no flag
#6  N  K no flag

#or
system.time(dt1[,sat:=1*(V1==V2)])
#   user  system elapsed 
#  0.104   0.000   0.103 
 identical(as.data.frame(dt1),dat1)
#[1] TRUE


#your method on a subset of dat1.
na1<- nrow(dat2)
sat <- c(rep(0,na1)) 
dat2 <- cbind(dat2,sat) 
system.time({
for(i in c(1:na1)){
  if( dat2[i,1] == dat2[i,2]) {
      dat2[i,3] <- 1
    }
  } 
})
 # user  system elapsed 
 #18.756   0.000  18.792 
identical(dat2,dat1[1:1e5,])
#[1] TRUE
A.K.



Hi, 

I have received NGS (next generation sequencing) data in an Excel file and 
would like to flag columns with synonymous mutations. 

The Excel file has 48 columns and my columns of interest are 28th and 31st. 

28th and 31st columns contain one letter alphabet (amino acid), and I'd like to 
flag them if they had the same alphabet. 

Below is an example 

28th column                      31st column                                 
sat 
S                                          T                                    
                 no flag 
A                                          L                                    
                 no flag 
K                                          K                                    
                 flag 

Here is the code I made and please don't laugh at it. I just started R two 
weeks ago. 

#_______________________________________ 
a1 <- read.csv(file.choose(),header=TRUE) 

na1 <- nrow(a1) 

sat <- c(rep(0,na1)) 
a1[,28] <- as.character(a1[,28]) 
a1[,31] <- as.character(a1[,31]) 
a1 <- cbind(a1,sat) 


for(i in c(1:na1)){ 
  if( a1[i,28] == a1[i,31]) { 
      a1[i,49] <- 1 
    } 
  } 
    
write.csv(a1,file.choose(), row.names = FALSE) 
#_______________________________________ 

I test-ran this code with a text Excel file with 30 rows without any problem. 

But a problem arose when I ran this code with an NGS Excel file with more than 
80,000 rows. It ran forever. 

Does anybody know how to shorten the running time? 

Any input would be appreciated. 

Thanks. 


SY

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to