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